如何在Javascript中编写Array.prototype.every()方法

如何在Javascript中编写Array.prototype.every()方法,javascript,arrays,predicate,Javascript,Arrays,Predicate,作为实践,我想编写一个与Array.prototype.every()方法类似的函数all()。仅当提供的谓词为数组中的所有项返回true时,此函数才返回true Array.prototype.all = function (p) { this.forEach(function (elem) { if (!p(elem)) return false; }); return true; }; function isGreaterThanZero (num) {

作为实践,我想编写一个与Array.prototype.every()方法类似的函数all()。仅当提供的谓词为数组中的所有项返回true时,此函数才返回true

Array.prototype.all = function (p) {
  this.forEach(function (elem) {
    if (!p(elem)) 
      return false;
  });
  return true;
};

function isGreaterThanZero (num) {
  return num > 0;
}

console.log([-1, 0, 2].all(isGreaterThanZero)); // should return false because -1 and 0 are not greater than 0
不知何故,这不起作用并返回
true
。我的代码怎么了?有更好的方法写这个吗?

你不能通过返回来打破循环。改用for循环

Array.prototype.all = function (p) {
  for(var i = 0; i < this.length; i++) {
    if(!p(this[i])) {
      return false;
    }
  }
  return true;
};
注意:这是演示退货问题的部分实现

Array.prototype.all=函数(p){
for(var i=0;i0;
}
log([-1,0,2].all(大于零))您不能通过返回来打破循环。改用for循环

Array.prototype.all = function (p) {
  for(var i = 0; i < this.length; i++) {
    if(!p(this[i])) {
      return false;
    }
  }
  return true;
};
注意:这是演示退货问题的部分实现

Array.prototype.all=函数(p){
for(var i=0;i0;
}

log([-1,0,2].all(大于零))foreach函数中的return不是从函数返回值。您可以这样编写代码

        Array.prototype.all = function (p) {
            for(var i = 0; i < this.length; i++){
                if (!p(this[i])) 
                    return false;
            }                
            return true;
        };

        function isGreaterThanZero (num) {
            return num > 0;
        }

        var result = [2, 3, 4].all(isGreaterThanZero);
        console.log("result", result);
Array.prototype.all=函数(p){
for(var i=0;i0;
}
var结果=[2,3,4]。全部(大于零);
console.log(“结果”,result);

foreach函数中的return不是从函数中返回值。您可以这样编写代码

        Array.prototype.all = function (p) {
            for(var i = 0; i < this.length; i++){
                if (!p(this[i])) 
                    return false;
            }                
            return true;
        };

        function isGreaterThanZero (num) {
            return num > 0;
        }

        var result = [2, 3, 4].all(isGreaterThanZero);
        console.log("result", result);
Array.prototype.all=函数(p){
for(var i=0;i0;
}
var结果=[2,3,4]。全部(大于零);
console.log(“结果”,result);

其他答案稍有错误。传入的回调应使用3个参数调用:当前项、索引和整个数组。这就是本机
数组的工作方式。每个
以及大多数本机数组函数都是这样工作的。您的回调函数可以选择使用这些参数,但大多数情况下不会

Array.prototype.all=函数(p){
for(var i=0;i0;
}

console.log([-1,0,2].all(大于零));//应返回false,因为-1和0不大于0
其他答案稍有错误。传入的回调应使用3个参数调用:当前项、索引和整个数组。这就是本机
数组的工作方式。每个
以及大多数本机数组函数都是这样工作的。您的回调函数可以选择使用这些参数,但大多数情况下不会

Array.prototype.all=函数(p){
for(var i=0;i0;
}

console.log([-1,0,2].all(大于零));//应该返回false,因为-1和0不大于0
您只能通过抛出异常来停止
forEach()
循环。只需对
循环使用正常的

Array.prototype.all = function (p) {
  for(var i = 0; i < this.length; i++) {
    if(!p(this[i])) {
      return false;
    }
  }
  return true;
};

您只能通过抛出异常来停止
forEach()
循环。只需对
循环使用正常的

Array.prototype.all = function (p) {
  for(var i = 0; i < this.length; i++) {
    if(!p(this[i])) {
      return false;
    }
  }
  return true;
};

您可能会发现这个链接很有趣,并查看类似lodash的库。如果您查看控制台,您会发现-1、0和2都没有得到任何结果。当循环返回false时,您并不是在终止它。您不能使用forEach终止循环,因为它专门用于运行每个项目。可能的重复链接您可能会发现此链接很有趣,并查看类似lodash的库。如果您查看控制台,您会发现-1为空,0为真,2为真。当循环返回false时,您并不是在终止它。不能使用forEach终止循环,因为它专门用于运行每个项。如果要使用完整数组#每个实现,请不要忘记添加。如果要使用完整数组#每个实现,请不要忘记添加。