1 回答
TA贡献1818条经验 获得超7个赞
当你做
nums.splice(i, 1)
这将从索引处的数组中删除 1 个项目i。例如,如果i是 2,则当前数组为
[0, 1, 2, 2, 3, 4]
然后,在splice发生这种情况之后,数组就变成了
[0, 1, 2, 2, 3, 4]
^^ REMOVED: Array mutates to
[0, 1, 2, 3, 4]
曾经位于 index 的项目i + 1现在位于 index i,因此for循环的下一次迭代不应递增i。
如果你确实增加了i,那么在删除的项目之后立即出现的每个项目都将被跳过,并且根本不会迭代:
var removeDuplicates = function(nums) {
for (var i = 0; i < nums.length; i++) {
if (nums[i] === nums[i + 1]) {
nums.splice(i, 1)
}
}
return nums
};
console.log(removeDuplicates([0, 1, 1, 1]));
尽管如此,这种风格的代码还是非常令人困惑:当一个对象在迭代过程中发生变化时,可能很不清楚正在实现的逻辑完成了什么。最好通过 Set 进行重复数据删除:
var removeDuplicates = nums => [...new Set(nums)];
console.log(removeDuplicates([0, 1, 1, 1]));
添加回答
举报
