我有一个像这样的对象
let ob1 = {
'item_data':{
'stack':{
'purchase':'12345',
'order':'22222'
}
}
}
和另一个像这样的对象
let ob2 = {
'stack':{
'purchase':'444444'
}
}
结果对象应如下所示
result = {
'item_data':{
'stack':{
'purchase':'444444',
'order':'22222'
}
}
}
代码位于nodejs应用程序中。我想知道是否有任何javascript库在服务器端js中进行这种合并/替换对象。
感谢您的帮助。
答案 0 :(得分:1)
有很多npm包可以实现这一目标,但非常受欢迎的是lodash.merge
。
看看lodash合并功能: https://lodash.com/docs/4.17.4#merge
这个方法就像_.assign,除了它递归地合并自己和 继承源对象的可枚举字符串键控属性 目标对象。解析为未定义的源属性 如果存在目标值,则跳过。数组和普通对象 属性以递归方式合并。其他对象和值类型是 被任务覆盖。源对象从左到右应用 对。后续资源会覆盖之前的属性分配 源。
一个例子:
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
使用lodash.merge
npm包引入此方法:
https://www.npmjs.com/package/lodash.merge
答案 1 :(得分:0)
这就是你想要的。
let ob1 = {
'item_data':{
'stack':{
'purchase':'12345',
'order':'22222'
}
}
}
// and another object like this
let ob2 = {
'stack':{
'purchase':'444444'
}
}
Object.assign(ob1.item_data.stack, ob2.stack);
console.log(ob1);
答案 2 :(得分:0)
试试这个:
function merge(a, b) {
for (var key in b) {
if (exports.merge.call(b, key) && b[key]) {
if ('object' === typeof (b[key])) {
if ('undefined' === typeof (a[key])) a[key] = {};
exports.merge(a[key], b[key]);
} else {
a[key] = b[key];
}
}
}
return a;
}
merge(obj1, obj2);