Estoy tratando de obtener valores únicos (por id) de dos matrices.
Pero devuelve toda la matriz en lugar de { id: 3 }
const a = [{ id: 1 }, { id: 2 }]; const b = [{ id: 1 }, { id: 2 }, { id: 3 }]; const array3 = b.filter((obj) => a.indexOf(obj) == -1); console.log(array3);¿Qué pasa aquí?
No puede comparar objetos, debe verificar que un elemento con esa identificación no exista en la otra matriz
aquí usé some que devuelven un valor booleano si puede encontrar una coincidencia
const a = [{ id: 1 }, { id: 2 }]; const b = [{ id: 1 }, { id: 2 }, { id: 3 }]; const array3 = b.filter(obj => !a.some(({id}) => obj.id === id)); console.log(array3)En su caso, el siguiente código proporciona todos los objetos únicos como una matriz, según la identificación.
const a = [{ id: 1 }, { id: 2 }]; const b = [{ id: 1 }, { id: 2 }, { id: 3 }]; const array3 = b.filter(objB => a.some((objA) => objB.id !== objA.id)); console.log(array3)Un enfoque diferente con un resultado simétrico.
const take = m => d => o => m.set(o.id, (m.get(o.id) || 0) + d), a = [{ id: 1 }, { id: 2 }], b = [{ id: 1 }, { id: 2 }, { id: 3 }], map = new Map(), add = take(map), result = []; a.forEach(add(1)); b.forEach(add(-1)); map.forEach((v, id) => v && result.push({ id })); console.log(result);