Tengo dos objetos y necesito fusionarlos y concatenar cadenas si dos accesorios tienen la misma nota clave: estoy usando lodash.js
obj1 = { name: 'john', address: 'cairo' } obj2 = { num : '1', address: 'egypt' }Necesito que el objeto fusionado sea como:
merged = {name:"john", num: "1", address:"cairo,Egypt"}el problema con la dirección prop cuando intento usar _.defaults(obj1,obj2) o _.merge(obj1,obj2)
el valor de la dirección será el valor de la propiedad de dirección dentro de obj2, por lo que necesito una forma de fusionar los dos objetos y concatenar las dos propiedades de dirección en cada objeto.
Prueba esto:
function merge(obj1, obj2) { let merged = { ...obj1, ...obj2 }; Object.keys(obj1).filter(k => obj2.hasOwnProperty(k)).forEach((k) => { merged[k] = obj1[k] + "," + obj2[k] }) return merged } obj1 = { name: 'john', address: 'cairo' } obj2 = { num: '1', address: 'egypt' } console.log(merge(obj1, obj2))function mergeObjects(objArr) { const newObj = {}; objArr.forEach((element) => { const keys = Object.keys(element); keys.forEach((key) => { if (newObj[key]) newObj[key] = newObj[key] + "," + element[key]; else newObj[key] = element[key]; }); }); return newObj; } const obj1 = {name: 'john', address: 'cairo'} const obj2 = { num : '1', address: 'egypt'} console.log(mergeObjects([obj1, obj2]));¡De esta manera puedes fusionar cualquier cantidad de objetos!
Ni siquiera necesitas lodash . Puede crear fácilmente su propia función para eso. Puedes hacerlo así:
new Set : para encontrar todas las claves únicas en ambos objetos de entradafor...of - para iterar sobre claves únicas calculadas anteriormente function mergeObjects(obj1, obj2) { let merged = {}; for (const property of [...new Set([...Object.keys(obj1),...Object.keys(obj2)])]) { if(obj1[property]) merged[property] = obj1[property]; if(obj2[property]) merged[property] = merged[property] ? `${merged[property]},${obj2[property]}` : obj2[property]; } return merged; } const obj1 = { name: 'john', address: 'cairo' }; const obj2 = { num : '1', address: 'egypt' }; const mergedObj = mergeObjects(obj1, obj2); console.log(mergedObj);