user13055304:
Supongamos que tengo una matriz como a continuación:
Arr1 = [12,30,30,60,11,12,30]
Necesito encontrar índice de elementos que se repiten en la matriz por ejemplo,
ans: 0,1,2,5,6
He probado este código, sino que está considerando solo elemento único para comprobar duplicados.
Maheer Ali:
En primer lugar obtener todos los duplicados utilizando filter()
y luego utilizando reduce()
conseguir que los índices de sólo aquellos elementos de la matriz que se encuentran endups
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)
La complejidad del tiempo de algoritmo anterior es O(n^2)
. Si desea O(n)
puede utilizar más adelante manera
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)