使用deepmerge.js合并具有不同类型的属性

时间:2019-06-28 16:40:19

标签: javascript merge

我正在尝试使用deepmerge为数组创建一个灵活的合并结构,类似于mongodb,在这里我可以传递一个对象,该对象告诉数组应该进行哪种合并。

想法是要有这样的东西:

let a = {
   foo: [1, 2, 3]
};

let b = {
   foo: [4, 5, 6]
}

deepmerge(a, b, someOptions);
// would result { foo: [4, 5, 6] }

let c = {
   foo: { $push: [4, 5, 6] }
}

deepmerge(a, b, someOptions);
// would result { foo: [1, 2, 3, 4, 5, 6] }

类似地,我也可以使用$unshift

问题是我不知道要实现这一目标我可以通过的someOptions

arrayMerge不起作用,因为第二个foo从未被调用,因为它不是数组。 customMerge不能正常工作,因为我没有类型信息,只有字段名称(可以是任何东西)。

我可以使用这些选项的组合吗?我不依赖于Deepmerge,因此也可以接受其他解决方案。谢谢。

1 个答案:

答案 0 :(得分:0)

所以我一个星期都没找到答案,所以我不得不自己创建一个lib哈哈哈

我称它为deepmerge-json(是的,我知道我是名字上的“最好的”),它是available on npm。这只是与一些数组合并功能的简单深度合并。任何建议都将受到欢迎。