用另一个对象替换一个对象-Javascript



我知道这是一个非常常见的问题,但我尝试了源代码,其中大多数都提供了一些库、ES6或一些本机js不支持的方法的答案。我想纯粹根据一个条件用另一个对象替换一个对象——没有ES6,没有clone,也没有copy

在以下情况下:我想从subObj中获取值,并将其替换为Obj1中的值

例如:关键属性";键2";以及";键3";从subObj 中存在的值中替换

Obj1 = {
"key1" : {values:[1, 2, 44, 505]},
"key2" : {values:[91, 25, 44, 5995]},
"key3" : {values:[1, 24, 44, 595]},
"key4" : {values:[17, 28, 44, 559]}
}
subObj = {
**"key2" : {values:[3, 3, 3, 444]},** // add this one 
**"key3" : {values:[1, 0, 0, 0]}**
}

所以输出看起来像:

Obj1 = {
"key1" : {values:[1, 2, 44, 505]},
**"key2" :{ values:[3, 3, 3, 444]},**
**"key3" : {values:[1, 0, 0, 0]},**
"key4" : {values:[17, 28, 44, 559]}
}

到目前为止,我已经尝试过这个:

somefunc: function(condition) {
if (condition) {
Object.keys(Obj1).forEach(function(key) { Obj[key] = Obj1[key]});
return Obj1;
}
return Obj;
},

这没有按预期工作,有什么帮助吗?thx

function merge(Obj1, subObj) {
const result = {};
Object.keys(Obj1).forEach((key) => {
result[key] = Obj1[key]
})
Object.keys(subObj).forEach((k) => {
if(result[k]){
console.log('update')
result[k] = subObj[k]
} else {
console.log("add")
result[k] = subObj[k]
}
})
console.log(result)
return result
}
merge(Obj1, subObj)

您可以使用Object.assign()

// ...
if (condition) {
return Object.assign(Obj1, subObj);
}
// ...

这就是我们对使用的排列运算符

const Obj1 = {
"key1" : {values:[1, 2, 44, 505]},
"key2" : {values:[91, 25, 44, 5995]},
"key3" : {values:[1, 24, 44, 595]},
"key4" : {values:[17, 28, 44, 559]}
}
const subObj = {
"key2" : {values:[3, 3, 3, 444]},
"key3" : {values:[1, 0, 0, 0]}
}
console.log({ ...Obj1, ...subObj });

最新更新