为什么这个函数返回undefined? [重复]

问题描述 投票:0回答:4

我想检查其中一个参数是否等于

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));
javascript
4个回答
2
投票

您得到

undefined
的原因是因为函数
isThree()
不返回任何内容。函数中的两个返回值是从
foreach()
内的匿名函数返回的。

我认为你的函数试图确定数组中是否有值

3
。已经有一个函数可以做到这一点:includes()。你的功能可以是:

function isThree(...args) {
  return args.includes(3);
};

console.log(isThree(1,2,3,4,5));

2
投票

与创建新作用域但不在单独函数中执行的 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


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));

0
投票

问题出在 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;

我希望它能让您了解如何解决循环中的意外代码;

随时乐意为您提供帮助!

© www.soinside.com 2019 - 2024. All rights reserved.