为什么这个函数不返回值?

时间:2020-02-16 20:04:00

标签: javascript

正在学习JavaScript,我正在尝试理解为什么以下函数未返回true或false。当我使用调试器逐步执行代码时,我看到它进入了return truereturn false的情况。

doesNumExistInArray = (objArray, num) => {
    Object.keys(objArray).forEach(key => {
      if (objArray[key].number === parseInt(num)) {
        return true;
      } else {
        return false;
      }
    });
  };

但是调用isDuplicate = doesNumExistInArray(objects, num)总是分配isDuplicate未定义。我想念什么?

2 个答案:

答案 0 :(得分:0)

您应该使用Array.prototype.some

如果有任何匹配项,该函数将返回true。

Array.prototype.forEach方法返回undefined,因此它不能用作可撤销的函数。

doesNumExistInArray = (objArray, num) => {
  return Object.keys(objArray).some(key => {
    return objArray[key].number === parseInt(num);
  });
};

答案 1 :(得分:0)

doesNumExistInArray是一个函数,但不返回任何内容。它实际上与Array.forEach一起运行所谓的“匿名函数”,该函数遍历objArray中的键。

基本上,Array.forEach 为每个元素做某事,但不返回任何内容(例如其他语言中的void),其中Array.map返回该元素的某些修改版本原始数组。让我们用Array.map将数组变成一个布尔值列表,它表示objArray键是否等于作为参数给出的数字(输入{{1看起来像[true, false, false] }}),然后使用1Array.reducetrue => 1的布尔值求和。基本上,对布尔值列表求和将为您提供真实值的数目-如果该数目不为零,则我们找到了一个匹配项。

这看起来确实很复杂,但是该算法可以在Python和其他要检查布尔值列表中是否至少有一个false => 0值的框架中运行。

true