Tengo estas 2 matrices de objetos.
Perdón por publicar la imagen porque quiero que entiendan rápidamente mis puntos.
¿Cuál es la mejor manera de comparar 2 matrices de objetos y buscar lo que no está en él?
Puedo hacer 2 niveles para bucles y un control de si, pero no estoy seguro de si es el mejor enfoque. Estoy buscando una forma JS de mejor rendimiento para lograr algo como esto.
Esto es lo que busco extraer al comparar arr1 y arr2 .
{ "id": 4, "name": "Date and Time" }Diferentes formas de lograr este requisito. También creé una verificación de rendimiento basada en las siguientes 3 soluciones aquí . Ejecute amablemente este conjunto de pruebas y, según el resultado, puede usar cualquiera de las siguientes soluciones en su proyecto.
const arr1 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }]; const arr2 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }, { id: 4, name: "Date and Time" }]; const res = arr2.filter((obj) => !arr1.find(({ id }) => obj.id === id)); console.log(res); const arr1 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }]; const arr2 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }, { id: 4, name: "Date and Time" }]; const IDArray = arr1.map(obj => obj.id); const res = arr2.filter(obj => !IDArray.includes(obj.id)); console.log(res); const arr1 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }]; const arr2 = [{ id: 1, name: "Weather" }, { id: 2, name: "Geo Location" }, { id: 3, name: "Device" }, { id: 4, name: "Date and Time" }]; const res = arr2.filter(({ id }) => !arr1.some(x => x.id == id)) console.log(res)Una forma es concatenar ambas matrices juntas, luego iterar y filtrar para ver si esa identificación existe en ambas matrices. Si no existe en ambas matrices, es extra.
a1.concat(a2).filter(a => a1.findIndex(f => f.id === a.id) == -1 || a2.findIndex(f => f.id === a.id) == -1) let arr1 = [{"id": 1,"name": "Date and Time"},{"id": 2,"name": "Date and Time"},{"id": 3,"name": "Date and Time"},{"id": 4,"name": "Date and Time"}] let arr2 = [{"id": 1,"name": "Date and Time"},{"id": 2,"name": "Date and Time"},{"id": 3,"name": "Date and Time"}] const findMissing = (a1, a2) => a1.concat(a2).filter(a => a1.findIndex(f => f.id === a.id) == -1 || a2.findIndex(f => f.id === a.id) == -1) console.log(findMissing(arr1, arr2))