假设我有一个如下数组:
Arr1 = [12,30,30,60,11,12,30]
我需要找到数组中重复的元素的索引,例如
ans: 0,1,2,5,6
我已经尝试过this代码,但它只考虑单个元素来检查重复项。
最佳答案
首先使用 filter()
获取所有重复项然后使用 reduce()
仅获取数组中 dups
中的元素的索引
const arr = [12,30,30,60,11,12,30];
const dups = arr.filter(x => arr.indexOf(x) !== arr.lastIndexOf(x));
const res = arr.reduce((ac, a, i) => {
if(dups.includes(a)){
ac.push(i)
}
return ac;
}, []);
console.log(res)
上述算法的时间复杂度为O(n^2)
。如果你想要O(n)
您可以使用以下方式
const arr = [12,30,30,60,11,12,30];
const dups = arr.reduce((ac, a) => (ac[a] = (ac[a] || 0) + 1, ac), {})
const res = arr.reduce((ac, a, i) => {
if(dups[a] !== 1){
ac.push(i)
}
return ac;
}, []);
console.log(res)
关于javascript - js中查找所有重复记录的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60667307/