我需要计算多维数组中重复项的数量,并在发现重复项时发出警报。
Arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"]]
建议:计数可以通过这种方式完成,如果 arr[0] 位置等于下一个位置,那么它必须给出一个计数并需要检查两个值的组合是否相同。然后为 arr[1] 位置检查下一个位置,依此类推其他位置直到最后
只计算第二个位置的精确组合,如 [3,"df"] 等于第四个组合的 [3,"df"]
预期输出计数:1 发现警报重复数据
我需要计算多维数组中重复项的数量,并在发现重复项时发出警报。
Arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"]]
建议:计数可以通过这种方式完成,如果 arr[0] 位置等于下一个位置,那么它必须给出一个计数并需要检查两个值的组合是否相同。然后为 arr[1] 位置检查下一个位置,依此类推其他位置直到最后
只计算第二个位置的精确组合,如 [3,"df"] 等于第四个组合的 [3,"df"]
预期输出计数:1 发现警报重复数据
我的回答从原来的问题(除了我已经有三个项目,如[3, "df"]
输入数组中)是:
const input = [
[2, "sk"], [3, "df"], [7, "uz"], [3, "df"], [7, "gh"],
[5, "df"], [21, "sk"], [2, "1sk"], [3, "df"]
];
const duplicate_count = input.length - new Set( input.map(JSON.stringify) ).size;
console.log(duplicate_count);
如果计数[[3,"df"],[3,"df"],[3,"df"]]
应该是一而不是二,那么可能是这样的:
const input = [
[2, "sk"], [3, "df"], [7, "uz"], [3, "df"], [7, "gh"],
[5, "df"], [21, "sk"], [2, "1sk"], [3, "df"]
];
const duplicate_count = [
...input
.map(JSON.stringify)
.reduce( (acc, v) => acc.set(v, (acc.get(v) || 0) + 1), new Map() )
.values()
].filter((v) => v > 1).length;
console.log(duplicate_count);
您可以map
连接数字和字符串,然后sort
. 最后,reduce
对重复项计数的数组。
const input = [
[2, "sk"],
[3, "df"],
[7, "uz"],
[3, "df"],
[7, "gh"],
[7, "df"],
];
const result = input
.map(([number, string]) => number + string)
.sort()
.reduce(
(acc, cur, i, { [i - 1]: last }) => (cur === last ? acc + 1 : acc),
0
);
console.log(`Count: ${result}${result && ' Alert duplicate data found'}`);
let arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"],[2,"sk"],[7,"uz"]]
function getNumDupes(a) {
return a.length-
arr.reduce((b,a)=>{if (!b.includes(a.join(""))) b.push(a.join("")); return b;},[]).length
}
console.log(getNumDupes(arr) + ' duplicates found');
您可以使用forEach
迭代数组,然后过滤并检查长度(如果发现长度超过 1),在 Map 中设置一个条目,该条目包含一个键值对,并将为相同的键保留 1 个条目,然后可以检查大小。
let arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"]];
let map = new Map();
arr.forEach(e1 =>
arr.filter(e2 => e1[0]===e2[0] && e1[1]===e2[1]).length > 1
? map.set(`${e1[0]}-${e1[1]}`,1)
: null
);
console.log(`${map.size} duplicate found`);