¿Cómo eliminar completamente los números repetidos de una matriz?
Por ejemplo, si:
const array = [1, 1, 2, 3, 1, 2, 5]La salida debe ser:
[3, 5]Roko y Ke1vans habían respondido en enfoques funcionales. Ambos son correctos. Sin embargo, mostraría una respuesta en un enfoque imperativo, que puede parecer más fácil para los recién llegados.
Similar a su flujo. Primero, contamos la ocurrencia de cada número. Luego seleccionamos los números que ocurrieron una vez (por lo tanto, no se repiten) en la matriz de salida.
let array = [1,1,2,3,1,2,5] let counts = {} let output = [] // loop each elements in the array as `item` for(let item of array) { // If the item is not set in the counts, `counts[item]` will be `undefined`. // Using `|| 0` means use zero as fallback value if the items is unseen. let count = counts[item] || 0 counts[item] = count + 1 } // loop each keys in the object (key-value pairs) as `item` for(let item in counts) { let count = counts[item] if(count == 1) { // `+item` converts the key from string into number output.push(+item) } } console.log(output) // will print out `[ 3, 5 ]`Puede iterar y crear un mapa de valores. luego iterar y filtrar.
const data = [1, 1, 2, 3, 1, 2, 5]; const findUniques = (data = []) => { const map = data.reduce((m, num) => { m[num] = (m[num] || 0) + 1; return m; }, {}); return data.filter((num) => map[num] === 1); }; console.log(findUniques(data));También puede hacer lo mismo usando 2 conjuntos o 2 matrices.
const data = [1, 1, 2, 3, 1, 2, 5]; const findUniques2 = (data = []) => { let unique = new Set(); let seen = new Set(); for (let num of data) { if (seen.has(num)) unique.delete(num); else unique.add(num); seen.add(num); } return Array.from(unique); }; console.log(findUniques2(data));Use un objeto donde la clave es el número y el valor es el número de ocurrencias. Luego redúzcalo de nuevo a la matriz de valores deseada:
const arr = [1,1,2,3,1,2,5]; const res = Object.entries(arr.reduce((ob, v) => { if (!(v in ob)) ob[v] = 0; ob[v] += 1; // Count occurrences return ob; }, {})).reduce((arr, [k, v]) => { // Reduce back to Array if (v === 1) arr.push(+k); // Only keys with 1 occurrence return arr; }, []); console.log(res); // [3, 5]