【问题标题】:Exclude duplicates from array [duplicate]从数组中排除重复项[重复]
【发布时间】:2020-11-04 16:08:04
【问题描述】:

我正在尝试从数组中排除重复的数字。例如:如果我过滤 [1,2,2,3,5,5] 的数组,输出应该是 [1,3]。

function unique(arr) {
  let sortArr = arr.sort()
  let res = []
  for (let i = 0; i < arr.length; i++) {
    if (sortArr[i] != sortArr[i + 1]) {
      res.push(sortArr[i])
    }
  }
  return res
}

console.log(unique([1, 2, 2, 3, 5, 5]))

我试图不将重复的数字添加到数组中,但我得到的不是 [1,3],而是 [1,2,3,5]

【问题讨论】:

标签: javascript


【解决方案1】:

最简单的调整是检查下一个元素前一个元素是否不等于当前元素:

function unique(arr) {
  let sortArr = arr.sort()
  let res = []
  for (let i = 0; i < arr.length; i++) {
    if (sortArr[i] != sortArr[i + 1] && sortArr[i] !== sortArr[i - 1]) {
      res.push(sortArr[i])
    }
  }
  return res
}

console.log(unique([1, 2, 2, 3, 5, 5]))

但是.sort 的计算复杂度为O(n log n)。这可以在O(n) 时间内通过计算对象中的结果数来完成:

function unique(arr) {
  const ones = new Set();
  const dupes = new Set();
  for (const item of arr) {
    if (dupes.has(item)) continue;
    if (ones.has(item)) {
      dupes.add(item);
      ones.delete(item);
    } else ones.add(item);
  }
  return [...ones];
}

console.log(unique([1, 2, 2, 3, 5, 5]))

【讨论】:

    【解决方案2】:

    使用Array.reduce,您可以获得每个项目的重复计数,并根据该数据,只能获取非重复值,如下所示。

    function unique(arr) {
      const groupBy = arr.reduce((acc, cur) => {
        acc[cur] ? acc[cur] ++ : acc[cur] = 1;
        return acc;
      }, {});
      
      return Object.entries(groupBy)
        .filter(([key, value]) => value === 1)
        .map(([key]) => +key);
    }
    
    console.log(unique([1, 2, 2, 3, 5, 5]));

    【讨论】:

      【解决方案3】:

      计算值的数量并仅返回等于 1 的值

      function unique(array) {
          var map = new Map();
          array.forEach(a => map.set(a, (map.get(a) || 0) + 1));
          return array.filter(a => map.get(a) === 1);
      }
      
      console.log(unique([1, 2, 2, 3, 5, 5]));

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 2016-10-01
        • 2011-06-29
        • 2021-11-12
        • 2021-01-27
        • 2013-08-03
        • 1970-01-01
        • 2022-01-03
        相关资源
        最近更新 更多