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

Codewars Array.diff JavaScript实现报错,基础测试不通过排查求助

问题原因

你代码里的核心错误是splice方法调用参数不正确:
splice仅传入1个索引参数时,会删除从该索引开始到数组末尾的所有元素。你失败的测试用例中,a为[1,2],当j=0时匹配到b中的1,执行a.splice(0)会直接把1和2全部删除,最终返回空数组,和预期不符。

除此之外你的代码还有两个可优化/修正的点:

  1. 匹配到待删除元素后,不需要继续遍历b数组的剩余项,直接跳出内层循环即可,避免无意义的判断
  2. 嵌套循环的实现效率较低,当数组量级较大时性能差,可将b转成Set后直接单次遍历a完成筛选

修复后的代码(兼容原有写法)

function arrayDiff(a, b) {  
  for (var j = 0; j < a.length; j++) {
    for (var i = 0; i < b.length; i++) {
      if(a[j] == b[i]) {
        a.splice(j, 1); // 增加第二个参数1,仅删除当前索引的单个元素
        j--;
        break; // 匹配到后直接跳出内层循环
      }
    }
  }
  return a;
}

更简洁的高性能实现

该实现不会修改原数组,逻辑更清晰,时间复杂度更低:

function arrayDiff(a, b) {
  const excludeSet = new Set(b);
  return a.filter(item => !excludeSet.has(item));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:42:02