Tengo dos matrices como esta y filtré estas dos matrices y las combiné en una matriz final y eliminé el valor duplicado y conservé el uno.
let arr1 = [ { name : 'abc', std: '1' }, { name : 'abc1', std: '2' }, { name : 'abc2', std: '3' }, ] let arr2 = [ { name : 'abc3', std: '1' }, { name : 'abc4', std: '2' }, { name : 'abc2', std: '3' }, ]salida esperada como quiero que abc2 obtenga solo una vez
let finalArr = [ { name : 'abc', std: '1' }, { name : 'abc1', std: '2' }, { name : 'abc2', std: '3' }, { name : 'abc3', std: '1' }, { name : 'abc4', std: '2' }, ]Entonces, ¿alguien puede ayudarme con cómo puedo hacer eso? Intenté muchas maneras pero no funcionó y en algún momento recibí un error.
Puede usar un Conjunto para el nombre dado y filtrar la matriz fusionada con el conjunto.
let arr1 = [{name : 'abc',std: '1'},{name : 'abc1',std: '2'},{ name : 'abc2', std: '3'}] let arr2 = [{name : 'abc3', std: '1' }, { name : 'abc4', std: '2' }, {name : 'abc2', std: '3'}] const names = new Set(arr1.map(({name}) => name)); const filteredArray = [...arr1, ...arr2.filter(({name}) => !names.has(name))]; console.log(filteredArray) .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}Los identificadores deben ser únicos en la matriz
arr.reduce((acc, current) => { const x = acc.find(item => item.id === current.id); if (!x) { return acc.concat([current]); } else { return acc; } }, []);También hay otra manera, tienes opciones :)
const arr1 = [{ name: 'abc', std: '1' }, { name: 'abc1', std: '2' }, { name: 'abc2', std: '3' }, ] const arr2 = [{ name: 'abc3', std: '1' }, { name: 'abc4', std: '2' }, { name: 'abc2', std: '3' }, ] function mapper(v) { return [v.name, v] }; const map = new Map(arr1.map(mapper).concat(arr2.map(mapper))); console.log([...map.values()])