为什么这个函数 returns 未定义?
Why does this function returns undefined?
我想检查其中一个参数是否等于 3
。
如果确实如此,我想 return true 但我得到 undefined
。
这是为什么 ?
function isThree(...args){
args.forEach(val => {
if(val === 3){
return true;
} else{
return false;
}
})
};
console.log(isThree(1,2,3,4,5));
与创建新作用域但不在单独函数中执行的 for 循环不同,forEach 是在单独函数中执行的。即,从 forEach 处理程序内部 returning 也不会从外部函数 return。
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
您 return 从 forEach
函数中获取一个值,但这并不意味着您 return 从 isThree
函数中获取一个值.此外,尝试使用 filter
函数来查找 是否 与您要查找的号码匹配。
试试这个:
function isThree(...args){
return args.filter(val => {
if(val === 3){
return true;
}
}).length > 0;
};
console.log(isThree(1,2,3,4,5));
在前面的示例中,我使用 filter
到 return 满足条件的数组的每个实例(在本例中为 val === 3
)。返回 true
会将结果附加到一个空数组,因此操作的响应将是一个包含满足条件的每个实例的数组。因此,通过将数组大小与 > 0
进行比较,我可以找出是否有任何元素符合条件。
您甚至可以使用 shorthand 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));
你得到 undefined
的原因是因为函数 isThree()
没有 return 任何东西。函数 return 中的两个 return 来自 foreach()
.
中的匿名函数
我认为您的函数试图确定数组中是否有值 3
。已经有一个函数:includes()。您的函数可以是:
function isThree(...args) {
return args.includes(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;
我希望它能让您了解如何解决循环中的意外代码;
总是乐于助人!
我想检查其中一个参数是否等于 3
。
如果确实如此,我想 return true 但我得到 undefined
。
这是为什么 ?
function isThree(...args){
args.forEach(val => {
if(val === 3){
return true;
} else{
return false;
}
})
};
console.log(isThree(1,2,3,4,5));
与创建新作用域但不在单独函数中执行的 for 循环不同,forEach 是在单独函数中执行的。即,从 forEach 处理程序内部 returning 也不会从外部函数 return。
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
您 return 从 forEach
函数中获取一个值,但这并不意味着您 return 从 isThree
函数中获取一个值.此外,尝试使用 filter
函数来查找 是否 与您要查找的号码匹配。
试试这个:
function isThree(...args){
return args.filter(val => {
if(val === 3){
return true;
}
}).length > 0;
};
console.log(isThree(1,2,3,4,5));
在前面的示例中,我使用 filter
到 return 满足条件的数组的每个实例(在本例中为 val === 3
)。返回 true
会将结果附加到一个空数组,因此操作的响应将是一个包含满足条件的每个实例的数组。因此,通过将数组大小与 > 0
进行比较,我可以找出是否有任何元素符合条件。
您甚至可以使用 shorthand 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));
你得到 undefined
的原因是因为函数 isThree()
没有 return 任何东西。函数 return 中的两个 return 来自 foreach()
.
我认为您的函数试图确定数组中是否有值 3
。已经有一个函数:includes()。您的函数可以是:
function isThree(...args) {
return args.includes(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;
我希望它能让您了解如何解决循环中的意外代码;
总是乐于助人!