我正在练习Javascript,我有一个问题。
我创建了一个名为“every”的函数,它接受了2个参数。 第一个参数是一个数组,第二个参数是一个布尔函数。 “每个”函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都返回true,则“every”函数返回true,否则返回false。
例如,
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
我提出了一个解决方案并且有效。
function every(array, bool) {
for (var i = 0; i < array.length; i++) {
if (!bool(array[i]))
return false;
}
return true;
}
然而,我试图将forEach合并到函数中并提出了这个
function every(array, bool) {
array.forEach(function(element) {
if(!bool(element))
return false;
});
return true;
}
但第二个不起作用。我用http://www.pythontutor.com/跟踪了每个执行步骤 并发现“bool(element)”函数的一部分给了我undefined而不是true或false。 所以我的问题是为什么它给我未定义?因为在这种情况下bool(element)应该与isNaN(element)相同。
答案 0 :(得分:1)
return
版本中的.forEach()
语句从.forEach()
回调中返回,而不是从您的封闭函数返回。
您的应用程序对.forEach()
来说并不是一个很好的用例。您并不是真的想要为数组中的每个元素执行此功能:您只想将数组处理到第一个false
元素。 Array原型已经有一个.every()
,所以你可以使用它,但是你的函数的整个点都会有问题:)