首页 > 解决方案 > 计算数组中的重复元素:Javascript

问题描述

有人可以查看我的代码并解释为什么我的返回值 = 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]));

标签: javascriptarraysfor-loopobject

解决方案


你有三个 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]));


推荐阅读