Necesito multiplicar todos los "valores" dentro de "obj1" con el "porcentaje" dentro de obj2 en función de la identificación de cada objeto. ¿Cuál sería la mejor manera de hacerlo? Probé con for loop y reduce pero no estaba No fue exitoso. Cualquier ayuda será apreciada.
const obj1 = [ { id: 1, value: 10 }, { id: 2, value: 10 } ] const obj2 = { len: { id: 1, nj: "321345", percent: 0.05, }, wor: { id: 2, nj: "321345", percent: 0.1, } } outputExpected: [ { id: 1, value: 0.5 }, { id: 2, value: 1 } ]Puede hacerlo revisando y haciendo coincidir las identificaciones. sin embargo, hay algunas optimizaciones que se pueden hacer si se ordenan.
const obj1 = [ { id: 1, value: 10 }, { id: 2, value: 10 } ] const obj2 = { len: { id: 1, nj: "321345", percent: 0.05, }, wor: { id: 2, nj: "321345", percent: 0.1, } } const x = Object.keys(obj2).map((key,index)=>{ const { id, value } = obj1.find(({id})=>id===obj2[key].id) return ({id,value:value*obj2[key].percent}) }) console.log(x) //outputExpected: [ { id: 1, value: 0.5 }, { id: 2, value: 1 } ]Esto debería funcionar para usted, pero no maneja excepciones si la identificación no existe en ambos objetos.
// First get the values in an array for easier manipulation const aux = Object.values(obj2) const output = obj1.map(ob => { // Find the id in the other array. const obj2Ob = aux.find(o => o.id === ob.id) // The id must exist in this aproach return { id: ob.id, value: ob.value * obj2Ob.percent } }) console.log(output) // [ { id: 1, value: 0.5 }, { id: 2, value: 1 } ]Primero puede crear un mapa de búsqueda usando Map , luego recorrer el obj1 usando map para obtener el resultado deseado
const obj1 = [ { id: 1, value: 10 }, { id: 2, value: 10 }, ]; const obj2 = { len: { id: 1, nj: "321345", percent: 0.05, }, wor: { id: 2, nj: "321345", percent: 0.1, }, }; const map = new Map(); Object.values(obj2).forEach((v) => map.set(v.id, v)); const result = obj1.map((o) => ({ ...o, value: o.value * map.get(o.id).percent })); console.log(result);