Estoy usando la biblioteca https://www.npmjs.com/package/deepmerge para fusionar en profundidad dos objetos anidados con una matriz de objetos, pero no obtengo el resultado esperado.
const x = { foo: { bar: 1 }, loo: { array: [ { too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, }; const y = { foo: { bar: 4 }, loo: { array: [ { too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, }; y console.log(deepmerge(x, y)); me da este resultado:
const result = { foo: { bar: 4 }, loo: { array: [ { too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, { too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, };pero esperaría esto:
const expectedResult = { foo: { bar: 4 }, loo: { array: [ { too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, };¿Me estoy perdiendo de algo?
En esta sección del documento , menciona que
De forma predeterminada, las matrices se fusionan concatenándolas.
Por lo tanto, debe proporcionar otra opción para anular este comportamiento predeterminado, esto se menciona a continuación, utilizando la opción arrayMerge
const x = { foo: { bar: 1 }, loo: { array: [{ too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, }; const y = { foo: { bar: 4 }, loo: { array: [{ too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }], }, ], }, }; console.log( deepmerge( x, y, { arrayMerge: (destinationArray, sourceArray, options) => sourceArray } ) ); <script src="https://unpkg.com/deepmerge@4.2.2/dist/umd.js"></script>