Tengo dos rayos. ejemplo de arreglos:
[{id: 1, name: "test 1" , title : "test 11"} , {id: 2, name: "test 2" , title : "test 22"} , {id: 3, name: "test 3" , title : "test 3"} , {id: 4, name: "test 4" , title : "test 4}]la diferencia entre estas dos matrices es solo el objeto ubicado en la segunda matriz con id 4
este:
{id: 4, name: "test 4" , title : "test 4}Lo que necesito ?
Necesito hacer un bucle pensando en la matriz o lo que sea y eliminar todos los elementos que están en la primera fila.
Después del bucle, mi nueva matriz debe verse así:
newArr = [{id: 4, name: "test 4" , title : "test 4}];No te escribiré lo que estaba tratando de hacer porque solo te confundiré.
EDITAR: mi intento ->
let concatArray = [...firstArray, ...secondArray]; let uniqueItems = [...new Set(concatArray)]; uniqueItems.filter((arr) => firstArray.id !== col.id);Esto no es trabajo...
fusionando dos matrices no obtengo nada. Necesito eliminar todos los elementos de la primera matriz solo.
Podemos usar la función de filtro Array y la función findIndex que nos permite encontrar el índice de un elemento en la matriz que cumple una determinada condición. Si el elemento no está presente, el índice será -1 , y así es como podemos identificar los objetos que faltan.
const filtered = secondArr.filter((secondItem) => { return firstArr.findIndex(({ id: firstItemId }) => firstItemId === secondItem.id) === -1; }) console.log(filtered); // [ { id: 4, name: 'test 4', title: 'test 4' } ]Lodash si no te importa.
const firstArr =[{id: 1, name: 'test 1' , title : 'test 11'},{id: 2, name: 'test 2' , title : 'test 22'},{id: 3, name: 'test 3' , title : 'test 3'}]; const secondArr = [{id: 1, name: 'test 1', title : 'test 11'} ,{id: 2, name: 'test 2' , title : 'test 22'} ,{id: 3, name: 'test 3' , title : 'test 3'} ,{id: 4, name: 'test 4' , title : 'test 4'}]; const notInBoth = [ ..._.differenceWith(firstArr, secondArr, _.isEqual), ..._.differenceWith(secondArr, firstArr, _.isEqual), ]; console.log(notInBoth); .as-console-wrapper{min-height: 100%!important; top: 0} <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>Puedes usar some :
const firstArr = [{id: 1, name: 'test 1' , title : 'test 11'}, {id: 2, name: 'test 2' , title : 'test 22'}, {id: 3, name: 'test 3' , title : 'test 3'}]; const secondArr = [{id: 1, name: 'test 1', title : 'test 11'} , {id: 2, name: 'test 2' , title : 'test 22'} , {id: 3, name: 'test 3' , title : 'test 3'} , {id: 4, name: 'test 4' , title : 'test 4'}]; let newArray = secondArr.filter(item => !firstArr.some(item2 => item2.id === item.id)); En palabras habladas: en newArray , busque en secondArr y obtenga una lista de elementos donde no se encuentran en ningún lugar en firstArr .