我正在自己练习Javascript,我有一个问题。
我制作了一个名为"every"的函数,它包含两个参数。第一个参数是数组,第二个参数是布尔函数。"every"函数的作用是将布尔函数应用于数组中的每个元素,如果每个元素都返回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)"部分给了我未定义的值,而不是true或false。所以我的问题是,为什么它给了我不明确的定义?因为在这种情况下,bool(元素)应该与isNaN(元素)相同。
.forEach()
版本中的return
语句从.forEach()
回调返回,而不是从封闭函数返回。
您的应用程序对于.forEach()
来说并不是一个很好的用例。您并不真的想为数组中的每个元素执行函数:您只想处理数组直到第一个false
元素。Array原型已经有一个.every()
,所以您可以使用它,但您的函数的全部要点将受到质疑:)