使用 deepmerge 将嵌套对象与对象数组合并
Merge nested object with array of objects with deepmerge
我正在使用库 https://www.npmjs.com/package/deepmerge 将两个嵌套对象与对象数组深度合并,但我没有得到预期的结果。
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));
给了我这个结果:
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 }],
},
],
},
};
但我希望这样:
const expectedResult = {
foo: { bar: 4 },
loo: {
array: [
{
too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }],
},
],
},
};
我是不是漏掉了什么?
By default, arrays are merged by concatenating them.
所以你必须提供另一个选项来覆盖这个默认行为,这在下面提到,通过使用 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>
我正在使用库 https://www.npmjs.com/package/deepmerge 将两个嵌套对象与对象数组深度合并,但我没有得到预期的结果。
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));
给了我这个结果:
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 }],
},
],
},
};
但我希望这样:
const expectedResult = {
foo: { bar: 4 },
loo: {
array: [
{
too: [{ bar: 1 }, { bar: 2 }, { bar: 3 }, { bar: 4 }, { bar: 5 }],
},
],
},
};
我是不是漏掉了什么?
By default, arrays are merged by concatenating them.
所以你必须提供另一个选项来覆盖这个默认行为,这在下面提到,通过使用 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>