Tengo algo de código de trabajo, aunque parece que debería ser mucho más eficiente. Siento que hay demasiados filtros trabajando con los mismos conjuntos de datos. ¿Existe una forma más limpia o más eficiente de fusionar 2 matrices sin duplicar?
const x = [1,3,7,4,9]; const y = [2,3,9,13,4]; const yFilteredByX = y.filter(element => x.includes(element)); const xFilteredByY = x.filter(element => y.includes(element)); const unique = (value, index, self) => { return self.indexOf(value) === index; }; const newArr = yFilteredByX.concat(xFilteredByY); const uniqueArr = newArr.filter(unique); console.log(uniqueArr); Actualmente genera [3,9,4] con éxito.
Hice un violín rápido
Set para cada matrizArray#filter y devolver solo los del segundo conjunto const _getCommonElements = (arr1 = [], arr2 = []) => { const set1 = new Set(arr1), set2 = new Set(arr2); return [...set1].filter(e => set2.has(e)); } console.log( _getCommonElements([1,3,7,4,9], [2,3,9,13,4]) );Cree un conjunto a partir de uno y luego filtre el otro comprobando si el conjunto tiene elementos.
const x = [1, 3, 7, 4, 9]; const y = [2, 3, 9, 13, 4]; const uniqueInX = new Set(x); const uniqueInBoth = y.filter(e => uniqueInX.has(e)); console.log(uniqueInBoth);Parece que tiene la intención de calcular la intersección de dos conjuntos, por lo que se puede usar la operación de función correspondiente de los documentos del desarrollador de mozilla , por ejemplo
const x = [1, 3, 7, 4, 9]; const y = [2, 3, 9, 13, 4]; function intersection(setA, setB) { let _intersection = new Set() for (let elem of setB) { if (setA.has(elem)) { _intersection.add(elem) } } return _intersection } const setX = new Set(x); const setY = new Set(y); const commonSet = intersection(setX, setY); console.log(...commonSet); // [3, 9, 4]