Tengo 2 matrices de objetos como
const arrayOne = [{id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'}]; const arrayTwo = [{id: 2, name: 'two'}, {id: 3, name: 'three'}];Aquí, necesito comparar ambas matrices y eliminar los objetos coincidentes de arrayOne, lo que finalmente debería dar
this.arrayOne = [{id: 1, name: 'one'}];Intenté como se muestra a continuación, pero está eliminando todos los objetos de la matriz.
this.arrayOne = this.arrayOne.filter(o1 => this.arrayTwo.some(o2 => o1.id === o2.id));¿Qué estoy haciendo mal aquí? Por favor recomiende. Gracias
const arrayOne = [ { id: 1, name: "one" }, { id: 2, name: "two" }, { id: 3, name: "three" }, ]; const arrayTwo = [ { id: 2, name: "two" }, { id: 3, name: "three" }, ]; const arrayTwoIds = new Set(arrayTwo.map((el) => el.id)); const arrayOneFiltered = arrayOne.filter((el) => !arrayTwoIds.has(el.id)); console.log(arrayOneFiltered); // [ { id: 1, name: 'one' } ] Según el tamaño de la matriz, la creación de un conjunto puede mejorar el rendimiento, ya que no es necesario arrayTwo arrayOne.length veces, sino solo una vez. Después de eso, puede buscar la existencia de una identificación en arrayTwo en tiempo constante.
Sin embargo, como se señaló en otra respuesta, esto no es necesario si las matrices son pequeñas (como en su ejemplo). En este caso, también podría usar este one-liner:
arrayOne = arrayOne.filter((elOne) => !arrayTwo.some((elTwo) => elOne.id === elTwo.id)); Aquí, arrayOne tendría que ser mutable, es decir, definido con let .
Puede encontrarlo comparándolo con id.
Y arrayOne debe ser let.
let arrayOne = [{id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 3, name: 'three'}]; const arrayTwo = [{id: 2, name: 'two'}, {id: 3, name: 'three'}]; arrayOne = arrayOne.filter(one => !arrayTwo.find(two => one.id == two.id)); console.log(arrayOne); const arrayOne = [{ id: 1, name: 'one' }, { id: 2, name: 'two' }, { id: 3, name: 'three' }]; const arrayTwo = [{ id: 2, name: 'two' }, { id: 3, name: 'three' }]; const arrayTwoId = arrayTwo.map(el => (el.id)); // extract id from arrayTwo const result = arrayOne.filter(el => !arrayTwoId.includes(el.id)); console.log(result);arrayTwo .arrayTwo .