假设我有一个对象a
a = {id:1,名称:' abc'}。
我有另一个对象b
为
b = {id:2}
或
b = {name: 'trp'}
或
b = {}
现在,我希望能够以这种方式比较和分配a和b(比如a = b),b
中的任何一个属性a
保持更新,如果它没有& #39; t持有任何属性,a
保持不变。
例如
a= {id: 1, name: 'abc'}
b= {name: 'trp'}
a=b //should give output a= {id: 1, name: 'trp'}
ALSO 可能是这个问题的解决方案非常简单。非常好。发布吧。无论解决方案是什么,它都明显绊倒了我的脑袋。
Arigatou gozaimasu
编辑还可能有第三种情况
b = {id: 2, name: 'trp', title:'not required'}
在这种情况下,将b与a的值进行比较和赋值的语句应该给出结果{id:2,name:' trp'}即没有合并
答案 0 :(得分:2)
“合并”这两个对象的最简单方法是使用Object.assign
(不用担心,它可以为Inernet Explorer填充)
a = {'id': 1, 'name': 'abc'}
b = {'name': 'trp'}
a = Object.assign(a, b)
结果
a == {'id': 1, 'name': 'trp'}
b
中具有相同键的任何属性都将覆盖a
(因为在代码示例中按顺序,从左到右或a
然后b
执行分配,任何现有的密钥都会被新值覆盖
答案 1 :(得分:1)
const a = { id: 1, name: 'abc'};
const b = {name: 'trp', title: 'edfg'};
const results = Object.keys(a).reduce((acc, key) => {
acc[key] = b[key] || a[key];
return acc;
}, {})
console.log(results);
答案 2 :(得分:0)
这里有你可以尝试的东西,它可能不是最好的解决方案,但它对我有用:
var a= {id: 1, name: 'abc', test:'test'}
var b= {name: 'trp'}
for (var key in a) {
if(key in b){
a[key]=b[key];
}
}
for (var key in b) {
if(!key in a){
a[key]=b[key];
}
}
尝试输出:
for (var key in a) {
if(key in b){
alert(a[key]);
}
}
这样一来,如果a中的某个键/值不存在于a中,a也会得到它
你可以把它变成一个函数:
function mergeArrays(a,b){
for (var key in a) {
if(key in b){
a[key]=b[key];
}
}
for (var key in b) {
if(!key in a){
a[key]=b[key];
}
}
return a;
}
答案 3 :(得分:0)
你可以在for循环中运行'b'对象,并替换具有匹配键名的'a'对象中的类似项。
$.each(b, function (key, val) {
a[key][]=val;
});
谢谢,希望这能解决你的问题。!!