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
相关产品推荐
相关产品推荐

