为什么这个函数 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;

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

总是乐于助人!