Javascript对象比较和分配

时间:2018-02-22 13:41:47

标签: javascript ecmascript-6

假设我有一个对象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'}即没有合并

4 个答案:

答案 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;
});

谢谢,希望这能解决你的问题。!!