Necesito actualizar (o crear una nueva matriz) el valor de identificación en obj1 según el valor de identificación en obj2. ¿Cuál es la mejor manera de hacer esto? Lo intenté con map y reduce pero no tuve éxito. Cualquier ayuda será apreciada.
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ] const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } } outputExpected: [ { id: 'AAA', name: 'foo' }, { id: 'BBB', name: 'bar' } ]Dependiendo del tamaño de sus arreglos, puede ser más eficiente construir un Map indexando obj2 ids ( Map(2) { 1 => 'AAA', 2 => 'BBB', ... } ) que se puede usar en el mapeo obj1.
const obj1 = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' },]; const obj2 = { A: { id: 1, externalId: 'AAA' }, B: { id: 2, externalId: 'BBB' } }; const map = new Map(Object.values(obj2).map((o) => [o.id, o.externalId])); const result = obj1.map(({ id, ...o }) => ({ id: map.get(id), ...o })); console.log(result);Sugeriría usar Array.map() , buscando en obj2 una identificación coincidente en cada objeto en obj1, usaríamos Array.find() para obtener el valor correspondiente en obj2.
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ] const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } } const result = obj1.map((obj) => { const match = Object.values(obj2).find(el => el.id === obj.id); return { id: match.externalId, name: obj.name }; }); console.log('Result:', result) .as-console-wrapper { max-height: 100% !important; top: 0; }Array.map funciona. Lea los valores de obj2 como matriz para asignar al resultado esperado. Supongo que las claves de objeto A , B podrían ignorarse.
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]; const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } }; const result = Object.values(obj2).map(({id, externalId}) => ({ id: externalId, name: obj1.find(item => item.id === id)?.name })); console.log(JSON.stringify(result));