He estado trabajando en un algoritmo que encontrará la diferencia simétrica de dos matrices (es decir, solo elementos que están en 1 de las 2 matrices, pero no en ambas). He llegado a lo siguiente hasta ahora:
function diffArray(arr1, arr2) { let newArr1 = arr1.slice(); let newArr2 = arr2.slice(); if (newArr1.length > newArr2.length) { return newArr1.filter((item) => !(item in newArr2)); } else { return newArr2.filter((item) => !(item in newArr1)); } }; const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); console.log(result); Pero cuando se prueba con diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]) el resultado es [4, 5] en lugar de solo [4] . El problema parece ocurrir con cualquiera que sea el último valor de cualquiera de las matrices, pero parece que no puedo entender qué es lo que está causando el problema en mi código. Gracias de antemano por cualquier ayuda.
El operador in comprueba si el valor de la izquierda coincide con un nombre de propiedad de la derecha.
Si desea verificar si uno de los valores de propiedad está en una matriz, use el método includes .
function diffArray(arr1, arr2) { let newArr1 = arr1.slice(); let newArr2 = arr2.slice(); if (newArr1.length > newArr2.length) { return newArr1.filter((item) => !newArr2.includes(item)); } else { return newArr2.filter((item) => !newArr1.includes(item)); } }; const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); console.log(result);Actualizar la respuesta para otra condición
const resultado = diffArray([1, 2, 3, 4], [1, 2, 3, 5]);
function diffArray(arr1, arr2){ const diff1 = arr1.filter(item => !arr2.includes(item)); // if item not available, the value will be filtered const diff2 = arr2.filter(item => !arr1.includes(item));// if item not available, the value will be filtered return diff1.concat(diff2); } // const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); const result = diffArray([1, 2, 3, 4], [1, 2, 3, 5]); // This condition will fail on the above code console.log(result);