Tengo tres arreglos de objetos. La primera matriz de objetos es el original state .
let originalArrState = [ { id:1, name:'Name 1 from id 1', number: 15 // => this needs to be removed based on the value `number` // in secondArrCompare - because we have there object with id of 1 }, { id:1, name:'Name 2 from id 1', number: 125 }, { id:1, name:'Name 3 from id 1', number: 130 }, // 135 needs to be added based on the value `number` in firstArrCompare because we have there // object with id of 1 ]ahora tengo otros dos arreglos de objetos que necesito comparar con el arreglo original
let firstArrCompare = [ { id:1, number:135 } ] let secondArrCompare = [ { id:1, number:15 } ] la idea es que debe ser dinámicamente, por lo que, en función de los valores en secondArrCompare , debemos eliminar objetos de originalArrState y, en función de firstArrCompare , debemos agregar uno nuevo después de eliminar el anterior.
Entonces, el resultado debería estar en la matriz final de objetos con valores 125 130 135 .
let originalArrState = [ { id:1, name:'Name 2 from id 1', number: 125 }, { id:1, name:'Name 3 from id 1', number: 130 }, { id:1, number: 135 }, ] Si firstArrCompare y secondArrCompare están vacíos, no se debe agregar ni eliminar nada. Los valores internos siempre serán uno a uno, por lo que un valor con la misma identificación en firstArrCompare y otro en secondArrCompare.
También podría haber objetos multiplicados con otra identificación, por ejemplo id-2 que mutará el estado original.
Por ejemplo
let firstArrCompare = [ { id:1, number:135 }, { id:2, number:1000 } // we search for id 2 in original arr so we can add this after the removing ] let secondArrCompare = [ { id:1, number:15 }, { id:2, number:100 } // now we need to search for id 2 in original arr to remove that ]Entonces, si hay id 1 en el primer arreglo, siempre habrá un objeto con id 1 en el segundo arreglo, por lo tanto, una relación uno a uno.
me quedé atascado en
var newArr = originalArrState.filter(itemOne => { return !secondArrCompare.some(itemTwo => { return itemOne.id == itemTwo.id; }) })Haciendo algunos cambios en su implementación. Tuvo que filtrar las coincidencias de combinación de id y number ; de lo contrario, se eliminarán todos los elementos con id:1 . Obtenemos newArr de esto.
Después de eso, firstArrCompare y agréguelo a newArray si el elemento con la misma id está presente en newArr
let originalArrState = [{ id: 1, name: 'Name 1 from id 1', number: 15 }, { id: 1, name: 'Name 2 from id 1', number: 125 }, { id: 1, name: 'Name 3 from id 1', number: 130 }, ] let firstArrCompare = [{ id: 1, number: 135 }, { id: 2, number: 1000 } ] let secondArrCompare = [{ id: 1, number: 15 }, { id: 2, number: 100 } ] var newArr = originalArrState.filter(itemOne => { return !secondArrCompare.some(itemTwo => { return itemOne.id === itemTwo.id && itemOne.number === itemTwo.number; }) }) firstArrCompare.forEach((el) => { if (newArr.some((item) => item.id===el.id)){ newArr.push(el) } }) console.log(newArr)