【问题标题】:Javascript - Delete all duplicates from arrayJavascript - 从数组中删除所有重复项
【发布时间】:2020-12-28 12:38:12
【问题描述】:

我在删除数组中的所有重复项时遇到问题。

数组 = [1,1,2,2,3]

我发现的每个解决方案都有这样的结果

数组 = [1,2,3]

但我需要这个

数组 = [3]

我该怎么做?

【问题讨论】:

  • 好的,所以您实际上对命令没有问题。删除重复项删除重复项,这意味着它将保留原始值。这并不意味着它将删除与重复项相关的所有内容。
  • 这听起来像是一个家庭作业问题。如果您从字面上搜索“删除数组中的重复项”,您将收到相关的 100 页结果

标签: javascript arrays duplicates


【解决方案1】:

您可以先对数组进行一次迭代以获得每个项目的频率Map,然后过滤以找到仅出现一次的元素。

const arr = [1,1,2,2,3];
const freq = arr.reduce((acc,curr)=>(acc.set(curr,(acc.get(curr)||0)+1),acc),new Map);
const res = arr.filter(x => freq.get(x) === 1);
console.log(res);

【讨论】:

    【解决方案2】:

    您可以为每个元素的出现存储一个对象并获取出现 1 的元素

    const arr = [1, 1, 2, 2, 3]
    
    const occurrences = arr.reduce((acc, el) => {
      acc[el] = (acc[el] || 0) + 1
      return acc
    }, {})
    
    const res = Object.entries(occurrences)
      .filter(([el, time]) => time === 1)
      .map(([el]) => +el)
    
    console.log(res)

    【讨论】:

      【解决方案3】:

      与其他一些解决方案不同,这允许您对数组进行单个循环,而不是reduce 后跟filter 和/或map 循环。也就是说,在可读性和其他条件检查方面存在权衡,并且它与 reduce 的语义意图有点快和松散,所以它可能会在好处方面被洗掉。

      const myArray = [1,1,2,2,3];
      
      const dupesRemoved = myArray.reduce((acc, cur, idx, src) => {
        if (!acc.dupes.has(cur)) {
          if (acc.singleInstances.has(cur)) {
            acc.singleInstances.delete(cur);
            acc.dupes.add(cur);
          } else {
            acc.singleInstances.add(cur);
          }
        }
        
        if (idx === src.length - 1) {
          return [...acc.singleInstances];
        }
      
        return acc;
      }, { singleInstances: new Set(), dupes: new Set() });
      
      console.log(dupesRemoved);

      【讨论】:

      • 如果您知道这些值只是数字,您可以使用索引来查看是否设置了数组的孔,如果设置了则增加它们。
      • @HanYolo -- 听起来很有趣 -- 你可能想把它作为自己的答案发布!
      【解决方案4】:

      这是一个简单而简短的解决方案:

      let arr = [1,1,2,2,3];  
      let filtered_arr = arr.filter(v => arr.indexOf(v) === arr.lastIndexOf(v));
      console.log(filtered_arr);

      【讨论】:

        猜你喜欢
        • 2021-07-20
        • 2013-08-03
        • 2019-11-04
        • 1970-01-01
        • 2020-07-02
        • 2011-12-02
        • 2023-02-21
        • 2012-10-04
        • 2012-12-06
        相关资源
        最近更新 更多