我想检查其中一个参数是否等于
3
。
如果确实如此,我想返回 true,但我得到 undefined
。
这是为什么 ?
function isThree(...args){
args.forEach(val => {
if(val === 3){
return true;
} else{
return false;
}
})
};
console.log(isThree(1,2,3,4,5));
您得到
undefined
的原因是因为函数 isThree()
不返回任何内容。函数中的两个返回值是从 foreach()
内的匿名函数返回的。
我认为你的函数试图确定数组中是否有值
3
。已经有一个函数可以做到这一点:includes()。你的功能可以是:
function isThree(...args) {
return args.includes(3);
};
console.log(isThree(1,2,3,4,5));
与创建新作用域但不在单独函数中执行的 for 循环不同,forEach 在单独函数中执行。即,从 forEach 处理程序内部返回也不会从外部函数返回。
let x = () => {
[1, 2, 3].forEach(v => {
console.log(v); // 1 2 3
return v;
})
return 0;
};
console.log(x()); // 0
let y = () => {
for (let v = 1; v <=3; v++) {
console.log(v); // 1
return v;
}
return 0; // never reached
};
console.log(y()); // 1
您正在从
forEach
函数返回一个值,但这并不意味着您正在从 isThree
函数返回一个值。另外,请尝试使用 filter
函数来查找是否有 is 与您要查找的号码匹配。
试试这个:
function isThree(...args){
return args.filter(val => {
if(val === 3){
return true;
}
}).length > 0;
};
console.log(isThree(1,2,3,4,5));
在前面的示例中,我使用
filter
返回满足条件的数组的每个实例(在本例中为 val === 3
)。返回 true
会将结果追加到一个空数组中,因此操作的响应将是一个包含满足条件的每个实例的数组。因此,通过将数组大小与 > 0
进行比较,我可以找出是否有任何元素符合条件。
您甚至可以使用简写来进一步减少功能
args.filter(val => val === 3)
:
function isThree(args){
return args.filter(val => val === 3).length > 0;
};
console.log(isThree(1,2,3,4,5));
或者,您可以使用原型函数
some
进一步简化,该函数检查数组中的任何元素是否满足条件:
function isThree(args){
return args.some(val => val === 3);
};
console.log(isThree(1,2,3,4,5));
问题出在 else 语句上,因为如果
if statement
没有找到,那么显然它会去 else statement
,这里是一个循环,所以需要修复循环
for(let a = 0; 10 > a; ++a )
{
if( a === 3) console.log('We\'re done'); // I expect only this not else statement
else console.log('Not found');
}
输出:
"Not found"
"Not found"
"Not found"
"We're done"
"Not found"
在上面的例子中你看到,很多时候我们都会犯这个错误,现在解决这个问题
for(let a = 0; 5 > a; ++a )
{
if( a === 3)
{
console.log('We\'re done');
return true; // I expect only this not else statement
}
}
console.log('Not found');
return false;
我希望它能让您了解如何解决循环中的意外代码;
随时乐意为您提供帮助!