javascript - 计算数组中的重复元素: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]));
解决方案
你有三个 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]));
推荐阅读
- javascript - 为什么我的 JavaScript 不能加载到我的网页上(使用 window.onload)?
- css - 如何在一侧创建带有人字形镂空背景图像/颜色的巨型机/英雄?
- c - 将元素保存在二维数组中
- javascript - 是否有一种通用的方法可以知道用户是否登录(或具有身份验证)到适用于所有人(或至少大多数网站)的网站?
- python - 从抓取创建文本文件但无法打开文件
- arrays - React Native 渲染随机数组图像
- arrays - 如何正确使用换行符作为分隔符将输入保存到数组中
- javascript - 从片段内的按钮打开一个活动(已解决!)
- wpf - 关闭窗口时如何从用户控件调用方法
- mysql - 如何在 phpmyadmin 中进行搜索和替换