正在学习JavaScript,我正在尝试理解为什么以下函数未返回true或false。当我使用调试器逐步执行代码时,我看到它进入了return true
或return 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
未定义。我想念什么?
答案 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]
}}),然后使用1
对Array.reduce
和true => 1
的布尔值求和。基本上,对布尔值列表求和将为您提供真实值的数目-如果该数目不为零,则我们找到了一个匹配项。
这看起来确实很复杂,但是该算法可以在Python和其他要检查布尔值列表中是否至少有一个false => 0
值的框架中运行。
true