You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Array.prototype实现all方法?求助修正错误代码

解决Array.prototype.all方法的实现问题

先看你写的代码:

Array.prototype.all = function(callback){
    for(let i = 0; i < this.length; i++){
      if(this[i] < 10) return true;
  }
      if(this[i] < 2) return false;
    }
}

这段代码存在几个关键问题:

  • 完全没用到传入的callback函数,硬写死了判断条件,完全偏离需求
  • 循环结束后i等于数组长度,this[i]是undefined,此时判断this[i] < 2既无意义还会引发错误
  • 逻辑完全搞反:你现在是第一个元素满足条件就直接返回true,但需求是所有元素都通过回调验证才返回true,只要有一个不满足就返回false

正确的实现思路:

  1. 遍历数组的每一个元素
  2. 对每个元素调用传入的callback,将当前元素作为参数传入
  3. 只要有一个元素调用callback后返回false,立刻返回false
  4. 遍历完所有元素都没触发返回,就返回true

按照思路写出的代码:

Array.prototype.all = function(callback) {
    for (let i = 0; i < this.length; i++) {
        // 调用传入的回调,传入当前元素
        if (!callback(this[i])) {
            // 有元素不满足条件,直接返回false
            return false;
        }
    }
    // 所有元素都满足,返回true
    return true;
}

测试示例:

  • [1,2,3].all(elem => elem < 10):所有元素都小于10,遍历结束后返回true
  • [1,2,3].all(elem => elem < 2):第二个元素2不满足条件,遍历到它时直接返回false,符合需求

如果想简化写法,也可以直接复用数组原生的every方法(适合快速实现,但手动循环更利于理解原理):

Array.prototype.all = function(callback) {
    return this.every(callback);
}

内容的提问来源于stack exchange,提问作者lulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:18:43