我试图实现javascript 数组的内置每个方法。 以下是两种略有不同的实现。他们采用数组和函数作为争论。
var every1 = function(a,fx){
a.forEach(function(i){
if (!fx(i)){
return false;};
})
return true;}
var every2 = function(a,fx){
for (var i in a){
if (!fx(a[i])){
return false;
};
}
return true;}
console.log(every1([NaN, NaN, 4], isNaN));
console.log(every2([NaN, NaN, 4], isNaN));
他们的意图就像内置的每个功能/方法一样。 第一个是返回 true ,第二个是返回 false
两者都应该是假的。有什么问题?
答案 0 :(得分:1)
在return false
回调中使用forEach
不会停止迭代。
您似乎想要[].every
代替:
var every = function(array, callback) {
return array.every(function(value, index, array) {
return callback(value);
});
}
console.log(every([NaN, NaN, 4], isNaN)); // false
console.log(every(["abc", NaN], isNaN)); // true

答案 1 :(得分:1)
让它变得更容易:
var every = function(data,predicateFunction) {
for(var i=0, length = data.length;i<length;i++) {
if(predicateFunction(data[i]) == false) {
return false;
}
}
return true;
};