user13055304:
Suponhamos que tem uma matriz como a seguir:
Arr1 = [12,30,30,60,11,12,30]
Preciso encontrar índice de elementos que se repetem na matriz por exemplo,
ans: 0,1,2,5,6
Eu tentei este código, mas ele está considerando elemento simplesmente única para verificar duplicatas.
Maheer Ali:
Primeiro obtenha todas as duplicatas usando filter()
e, em seguida, usando reduce()
obter ele índices de apenas os elementos do array que estão emdups
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)
A complexidade de tempo do algoritmo acima é O(n^2)
. Se você quiser O(n)
você pode usar abaixo maneira
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)