【问题标题】:Is there a way to remove duplicate values in javascript without creating a second array to store the unique values?有没有办法在不创建第二个数组来存储唯一值的情况下删除 javascript 中的重复值?
【发布时间】:2021-01-16 02:51:45
【问题描述】:

我已经创建了这个:

const arr = [1,1,2,2,3,3,4,4,5,5,5,6];

for (i = 0; i <= arr.length; i++){
  for (j = 0; j <= arr.length; j++){ 
   if(arr[i] === arr[j]){
     arr.splice(arr[i]  ,1)
   }
  }  
}

console.log(arr);

但是我删除了第一个值,其余的都可以正常工作。为什么要删除第一个值?

【问题讨论】:

  • 让 j-loop 从 i+1 开始,也节省时间

标签: javascript arrays duplicates


【解决方案1】:

因为您在 splice 方法中传递的是值而不是索引。 尝试打印正在删除的任何内容,您将得到答案并 这是解决方案

   const arr = [1,1,2,2,3,3,4,4,5,5,5,6];

for (i = 0; i <= arr.length; i++){
  for (j = 0; j <= arr.length; j++){ 
   if(arr[i] === arr[j]){
     arr.splice(arr.indexOf(arr[i])  ,1)
   }
  }  
}

console.log(arr); 

祝你好运:)

【讨论】:

    【解决方案2】:

    您也可以使用Set 来实现此目的。

    const unique = [...new Set([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6])];
    /**
     * If you don't want to use the spread operator
     *
     * `Array.from(new Set([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6]));`
     *
     * is also an option
     */ 
    console.log(unique)

    【讨论】:

      【解决方案3】:

      您正在修改数组,同时循环它。

      更现代的方法是使用Array.reduce

      let unique = [1,1,2,2,3,3,4,4,5,5,5,6]
        .reduce( (a, b) => 
          !a.find(v => v === b) ? [...a, b] : a, []);
      console.log(unique);

      【讨论】:

        猜你喜欢
        • 2012-06-10
        • 2014-03-04
        • 2022-12-22
        • 2019-03-24
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        相关资源
        最近更新 更多