我正在尝试打印阵列中重复项的总数。相反,元素的总数是从数组中打印出来的,而不是那里的重复项
self.delete
答案 0 :(得分:3)
如果您只想要重复项的总数,即[1,1,2,2,3] // 2
,那么使用es6的解决方案可能会很短而且很甜
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
const duplicateCount = (a) => a.length - new Set(a).size;
console.log(duplicateCount(ar));
答案 1 :(得分:1)
如果您只想获取重复项的总数,则可以创建另一个过滤掉它们的数组,然后得到差值:
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
const duplicatesFilteredOut = ar.filter((a, i, self) => i === self.indexOf(a))
const totalDuplicates = ar.length - duplicatesFilteredOut.length
答案 2 :(得分:1)
如果要计算重复值的数量,可以使用filter(),方法是:
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
let res = ar.filter((x, i) => ar.some((y, j) => y === x && i !== j));
console.log(res.length);
如果您需要有关重复值的详细信息,则可以执行以下操作:
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
let res = ar.reduce((data, curr) =>
{
data[curr] = data[curr] ? ++data[curr] : 1;
return data;
}, {});
Object.entries(res).forEach(([val, numTimes]) =>
{
if (numTimes > 1)
console.log(`Value ${val} appears ${numTimes} times`);
});
答案 3 :(得分:1)
另一种选择是将函数reduce
与特殊的累加器一起使用,该累加器提供dupes
属性作为计数器,并提供dict
作为先前计数的数字的面包屑。
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20],
dupes = ar.reduce((a, c) =>
(a.dupes += a.dict[c] || 0, a.dict[c] = 1, a), {dupes: 0, dict: {}}).dupes;
console.log(dupes);
答案 4 :(得分:0)
您可以使用一个对象来跟踪每种元素。像这样:
const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
function pairs(arr) {
const pairCount = {};
for (let a of ar) {
if (a in pairCount) {
pairCount[a]++;
} else {
pairCount[a] = 1;
}
}
return pairCount;
}
console.log(pairs(ar));
答案 5 :(得分:0)
答案 6 :(得分:0)
您可以改用此函数获取数组中重复项的总数。
const getDupCount = array => {
const uniqueItems = new Set(array)
const duplicates = array.length - uniqueItems.size
return duplicates
}
答案 7 :(得分:0)
这是一种通过对象中的值返回重复项的方法:
const values = [10, 20, 20, 10, 10, 30, 50, 10, 20];
function duplicates(arr) {
return Object.values(arr).reduce((acc, val) => {
acc.count[val] = (acc.count[val] || 0) + 1;
if (acc.count[val] > 1) acc.duplicates[val] = acc.count[val];
return acc;
}, { count: {}, duplicates: {} }).duplicates;
}
console.log(duplicates(values));
console.log(Object.values(duplicates(values)).reduce((sum, x) => sum + x, 0));