Necesito fusionar algunos objetos en un solo objeto, pero NO elimine los duplicados . Intenté usar lodash.merge(), pero está reemplazando los duplicados. También el mismo problema con la asignación, pero la asignación solo hace una copia superficial y también reemplaza los duplicados.
_.merge({}, { a: { large: { url: '1' } }}, { b: { large: { url: '2' } }}, { c: { large: { url: '3' } }}, {a: { large: { url: '4' } }});El resultado es
{ "a": { "large": { "url": "4" } }, "b": { "large": { "url": "2" } }, "c": { "large": { "url": "3" } } }Pero yo necesito
{ "a": { "large": { "url": "1" } }, "b": { "large": { "url": "2" } }, "c": { "large": { "url": "3" } }, "a": { "large": { "url": "4" } }, }¡Por favor ayuda!
¿Cómo puedo mantener los duplicados? ¡Gracias!
Puede usar mergeWith() para personalizar cómo ocurre la fusión. En su caso, sugeriría crear una matriz para cualquier objeto duplicado.
Para hacer esto, crearíamos una función mergeCustomizer() que generará una matriz si obtenemos duplicados.
function mergeCustomizer(objValue, srcValue) { if (objValue) { return [objValue].flat().concat(srcValue); } return srcValue } let merged = _.mergeWith({}, { a: { large: { url: '1' } }}, { b: { large: { url: '2' } }}, { c: { large: { url: '3' } }}, {a: { large: { url: '4' } }}, mergeCustomizer); console.log('Merged:',merged) <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>