【问题标题】:Counting Duplicate elements in an array: Javascript计算数组中的重复元素:Javascript
【发布时间】:2020-09-22 03:12:33
【问题描述】:

有人可以查看我的代码并解释为什么我的返回值 = 3 而应该是 2 吗?该对象具有正确的计数 {1: 2, 2: 3, 3: 1, 4: 1, 5: 1}。只有两个值 >= 2。

  function countDuplicates(arr) {
    let dupNums = {};
    let count = 0;
    ​
    for (let i=0; i<arr.length; i++) {
    ​
        if (dupNums[arr[i]] === undefined) {
            dupNums[arr[i]] = 0;
        }
    ​
        if (dupNums[arr[i]] !== undefined) {
            dupNums[arr[i]] += 1;
        }
    ​
        if (dupNums[arr[i]] >= 2) {
            count++;
        }
    }
    return count; 
    }
    console.log(countDuplicates([1,2,1,3,2,4,5,2]));

【问题讨论】:

  • 因为你数过他们不止一次......

标签: javascript arrays for-loop object


【解决方案1】:

你有三个 2 和两个 1。每次找到重复项时,count 都会递增。

然后迭代对象的值,并计算 >= 2 的值的数量:

function countDuplicates(arr) {
  const dupNums = {};
  for (const num of arr) {
    dupNums[num] = (dupNums[num] || 0) + 1;
  };
  return Object.values(dupNums)
    .filter(num => num >= 2)
    .length;
}
console.log(countDuplicates([1, 2, 1, 3, 2, 4, 5, 2]));

reduce:

function countDuplicates(arr) {
  const dupNums = {};
  for (const num of arr) {
    dupNums[num] = (dupNums[num] || 0) + 1;
  };
  return Object.values(dupNums)
    .reduce((a, num) => a + (num >= 2), 0)
}
console.log(countDuplicates([1, 2, 1, 3, 2, 4, 5, 2]));

【讨论】:

  • 注意:IE 不支持Object.values。否则可以使用Object.keys
  • @AmitChigadani 注意:Microsoft 将于 2021 年 8 月结束对大多数 Microsoft 在线产品的 IE 支持。如果您还没有开始过渡,那么现在是时候了。 Object.values 也有几个 polyfill;见MDN
  • 哈哈,我的代码已经用 polyfills 排序了。谢谢!
【解决方案2】:

使用一个Set 跟踪重复号码,另一个Set 跟踪计数。 以下应该适用于您的场景。

function countDuplicates(arr) {
  const dupNums = new Set();
  const countSet = new Set();

  arr.forEach((num) =>
    dupNums.has(num) ? countSet.add(num) : dupNums.add(num)
  );

  return countSet.size;
}
console.log(countDuplicates([1, 2, 1, 3, 2, 4, 5, 2]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2020-12-01
    • 1970-01-01
    • 2016-03-07
    • 2010-09-16
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多