La siguiente función encuentra elegantemente duplicados en arreglos unidimensionales:
const findDuplicates = (dataArray) => { const duplicates = dataArray.filter((e, index, arr) => arr.indexOf(e) !== index); return (duplicates); };Cuando le envío (por ejemplo) esta matriz ['123456', '787877', '763223', '787877', '854544'] devuelve ['787877'].
Lo que necesito es algo similar que funcione para una matriz bidimensional, por lo que (por ejemplo) ingresar
[ ['123456', 'Smith'], ['787877', 'Jones'], ['763223', 'Waldo'], ['787877', 'Quagmire'], ['854544', 'Miller'] ]devoluciones
[['787877', 'Jones'], ['787877', 'Quagmire']]
(Para ser claros, solo me interesa si el primer campo de cada subarreglo es un engaño).
Puede tomar un objeto y usar valores booleanos para indicar duplicados. Luego filtre la matriz.
const findDuplicates = data => { const keys = data.reduce((r, [v]) => { r[v] = r[v] !== undefined; return r; }, {}); return data.filter(([v]) => keys[v]); }, data = [['123456', 'Smith'], ['787877', 'Jones'], ['763223', 'Waldo'], ['787877', 'Quagmire'], ['854544', 'Miller']], result = findDuplicates(data); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; } const findDuplicates = (dataArray) => { const duplicates = dataArray.filter((e, index, arr) => { return arr.some((val, i) => (index !== i && val[0] === e[0])) }) return (duplicates); }; const result = findDuplicates([ ['123456', 'Smith'], ['787877', 'Jones'], ['763223', 'Waldo'], ['787877', 'Quagmire'], ['854544', 'Miller'] ]) console.log(result)