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

JavaScript数组移除adjacent duplicates异常:预期3项仅得2项求助

问题排查与修复:移除数组相邻重复项时丢失最后一个元素

我来帮你搞定这个问题~先看看你的代码逻辑哪里出了问题:

问题根源

你的代码里,当遍历到数组最后一个元素(索引3)时,nLength被设为0,这时候你拿最后一个元素的key和第一个元素的key对比(两者都是mw://HOME_BIN),触发了continue,导致最后一个元素没有被加入nArr,所以最终结果少了一项。

你的判断逻辑是「当前元素和下一个元素key相同就跳过」,但这个逻辑在处理最后一个元素时会出错——因为下一个元素不存在,你拿第一个元素来对比,这完全不符合「相邻重复」的判断要求。

修复后的代码

正确的思路应该是:对比当前元素和上一个已经保留在结果数组里的元素的key,只有当两者不同时,才把当前元素加入结果数组。这样就能准确识别相邻重复项,不会漏掉最后一个元素:

var arr = [{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}},{"mw://HOME_BIN":{"position":3}}];
var nArr = [];
for(var i = 0; i < arr.length;++i){
  var currentKey = Object.keys(arr[i]).join('');
  // 第一个元素直接加入结果数组
  if (nArr.length === 0) {
    nArr.push(arr[i]);
  } else {
    // 拿当前元素和结果数组最后一个元素的key对比
    var lastKey = Object.keys(nArr[nArr.length - 1]).join('');
    if (currentKey !== lastKey) {
      nArr.push(arr[i]);
    }
  }
}
console.log(nArr);

运行结果

这段代码执行后,会得到你预期的输出:

[{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:10