Dadas dos matrices de enteros, quiero crear una nueva matriz con solo los valores únicos de las dos matrices de entrada. Sé que hay muchas maneras diferentes de hacer esto, pero me interesa saber por qué la forma en que intento hacerlo no funciona.
const arr1 = [1, 2, 3, 4, 5]; const arr2 = [2, 3, 1, 0, 5]; // combine both arrays const combined = arr1.concat(arr2); // sort combined array combined.sort(); // fitler out elements identical to the preceding element const result = combined.filter((el, i, a) => { if ( (el != a[i-1]) ) { console.log("return", el); return el; } }); // print console.log(result);Aunque cero es parte de la matriz combinada, la salida es [1,2,3,4,5]. Cuando hago console.log, definitivamente veo que mi método de filtro devuelve el elemento cero, pero por alguna razón no aparece en la matriz de resultados. ¿Qué ocurre?
La lambda en el filter debe devolver un valor booleano ( thruthy o false ). 0 se considera falso, por lo que el valor no estará en el resultado.
Tal vez no necesite un ciclo después de todo: un Set elimina los valores duplicados.
const arr1 = [1, 2, 3, 4, 5]; const arr2 = [2, 3, 1, 0, 5]; // use Set console.log(JSON.stringify([...new Set(arr1.concat(arr2))])); // or filter with a lambda that returns true/false const result = arr1.concat(arr2).sort().filter((val, i, a) => val !== a[i-1]); console.log(JSON.stringify(result));