【问题标题】:Finding duplicates in Array, Javascript在 Array、Javascript 中查找重复项
【发布时间】:2021-07-12 15:57:33
【问题描述】:

我正在尝试在数组中查找重复项并使用 splice 方法在重复索引处删除它们,代码正在删除重复项但它仍然留下一个重复项。

var removeDuplicates = function(nums) {
  let length = nums.length;
    for(let i=0;i<length;i++){
      for(let j=i+1;j<length;j++){       
        if(nums[i]==nums[j]){
          console.log(nums);
               nums.splice(j,1)
        }
      }
    } 
   return nums;
};


console.log(removeDuplicates([1,2,2,2,2,2,2]))

【问题讨论】:

  • 尝试使用Set, [...new Set([1,2,2,2,2,2,2])]

标签: javascript arrays duplicates


【解决方案1】:

问题是您正在向前循环并同时删除元素,这会弄乱索引。

因此,在这种情况下,您应该向后循环。

var removeDuplicates = function (nums) {
  let length = nums.length;
  for (let i = length - 1; i >= 0; i--) {
    console.log(`All redundant instances of ${nums[i]} will be removed`);
    for (let j = i - 1; j >= 0; j--) {
      if (nums[i] == nums[j]) {
        nums.splice(j, 1);
      }
    }
    console.log(JSON.stringify(nums));
  }
  return nums;
};

const result = removeDuplicates([1, 1, 2, 3, 3, 2]);
console.log("Final Result", JSON.stringify(result));

为了删除重复项,我总是更喜欢使用Set

const 
  arr = [1, 1, 2, 3, 3, 2],
  result = [...new Set(arr)]

console.log(JSON.stringify(result))

【讨论】:

  • @prmdpsn56 请检查这是否解决了您的问题。如果您有任何问题,请告诉我。
【解决方案2】:

有多种方法可以删除数组重复项。

const names = ['John', 'Paul', 'George', 'Ringo', 'John'];

let unique = [...new Set(names)];
console.log(unique); // 'John', 'Paul', 'George', 'Ringo'
const names = ['John', 'Paul', 'George', 'Ringo', 'John'];

let x = (names) => names.filter((v,i) => names.indexOf(v) === i)
x(names); // 'John', 'Paul', 'George', 'Ringo'
const names = ['John', 'Paul', 'George', 'Ringo', 'John'];

function removeDups(names) {
  let unique = {};
  names.forEach(function(i) {
    if(!unique[i]) {
      unique[i] = true;
    }
  });
  return Object.keys(unique);
}

removeDups(names); // // 'John', 'Paul', 'George', 'Ringo'

https://wsvincent.com/javascript-remove-duplicates-array/

https://medium.com/dailyjs/how-to-remove-array-duplicates-in-es6-5daa8789641c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 2013-07-31
    • 2014-08-08
    • 2020-12-02
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多