Solo trato de actualizar las fechas en array2 si la ID coincide en array1 para que no sean nulas.
let array1 = [{"id":1, "date": "23/11/21"}, {"id":2, "date":"20/11/21"}, {"id":3, "date":"15/11/21"}] let array2 = [{"id":1, "name": "John", "date": null}, {"id":2, "name": "Max", "date": null}, {"id":3, "name": "Peter", "date": null}]Salida deseada:
let array2 = [{"id":1, "name": "John", "date":"23/11/21" }, {"id":2, "name": "Max", "date": "20/11/21"}, {"id":3, "name": "Peter", "date": "15/11/21"}]¿Cómo uso un bucle con el método indexof()?
Puede usar un método de map para iterar a través de la segunda matriz, encontrar un elemento con la misma id en la primera matriz y tomar la fecha desde allí:
let array1 = [{ "id": 1, "date": "23/11/21" }, { "id": 2, "date": "20/11/21" }, { "id": 3, "date": "22/11/15" }] let array2 = [{ "id": 1, "name": "John", "date": null }, { "id": 2, "name": "Max", "date": null }, { "id": 3, "name": "Peter", "date": null }]; const updated = array2.map(el => { const isIdInFirstArr = array1.find(e => e.id === el.id); if (isIdInFirstArr) { el.date = isIdInFirstArr.date; } return el; }) console.log(updated)1) Puede lograr esto de manera eficiente usando Map como:
let array1 = [ { id: 1, date: "23/11/21" }, { id: 2, date: "20/11/21" }, { id: 3, date: "15/11/21" }, ]; let array2 = [ { id: 1, name: "John", date: null }, { id: 2, name: "Max", date: null }, { id: 3, name: "Peter", date: null }, ]; const map = new Map(); array1.forEach((o) => map.set(o.id, o.date)); let result = array2.map((o) => ({ ...o, date: o.date ?? map.get(o.id) })); console.log(result); /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; } 2) Puede lograr fácilmente el resultado usando el map y find
let array1 = [ { id: 1, date: "23/11/21" }, { id: 2, date: "20/11/21" }, { id: 3, date: "15/11/21" }, ]; let array2 = [ { id: 1, name: "John", date: null }, { id: 2, name: "Max", date: null }, { id: 3, name: "Peter", date: null }, ]; let result = array2.map(o => ({ ...o, date: o.date ?? array1.find(obj => obj.id === o.id)?.date})); console.log(result) /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }