首页 > 解决方案 > 尝试使用.splice 删除 JavaScript 中的重复项

问题描述

我正在尝试创建一个函数,从数组中删除重复的数组元素并返回没有重复的相同数组。我认为这会起作用:

var removeDuplicates = function(nums) {
  nums.sort(function(a,b){ return a-b;});
  let len = nums.length;
  for (let i = 0; i < nums.length; i++){
    if (nums[i] === nums[i+1]){
      nums.splice(i,1);
    }
  }
  return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));

但是,底部的控制台日志将 nums 返回为 [0,1,1,2,3,4] 而不是我期望的 [0,1,2,3,4]。有什么方法可以修改 for 循环或以不同的方式使用 splice(或者可能是其他不返回新数组的数组方法)来删除最后 1 个重复项?

标签: javascriptarrayssplice

解决方案


您需要减少索引,因为它上面的元素将被移动到当前索引中。

var removeDuplicates = function(nums) {
  nums.sort(function(a,b){ return a-b;});
  let len = nums.length;
  for (let i = 0; i < nums.length; i++){
    if (nums[i] === nums[i+1]){
      nums.splice(i,1);
      --i;
    }
  }
  return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));

或者,向后循环完全避免了这个问题。

var removeDuplicates = function(nums) {
  nums.sort(function(a,b){ return a-b;});
  let len = nums.length;
  for (let i = nums.length - 1; i >= 0; i--){
    if (nums[i] === nums[i+1]){
      nums.splice(i,1);
    }
  }
  return nums;
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));

更简单的方法是使用Set.

var removeDuplicates = function(nums) {
  return [...new Set(nums.sort((a,b)=>a-b))];
};
console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));


推荐阅读