Javascript内置'every'方法实现。 forEach,for循环

时间:2016-06-19 11:12:27

标签: javascript

我试图实现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

两者都应该是假的。有什么问题?

2 个答案:

答案 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;
};