我在使用Object.assign错误?
我坚信它将替换这些值,但实际上它会覆盖它们...
例如,“ PEACH”属性在分配后将被删除。
这很奇怪吗?您将如何解决这个问题?
让我们保存PEACH
var result = Object.assign({
'first_level': {
'second_level': {
'changeme': 'not changed bruh',
'PEACH': 'PLEASE SAVE ME!'
}
},
'hehe' : 'I will stay here'
}, {
'first_level': {
'second_level': {
'change': 'Changed B]',
'addme': 'Extra prop'
}
},
'huh' : 'I want to join the party'
});
document.body.innerHTML = '<pre>'+JSON.stringify(result, null, 2)+'</pre>';
答案 0 :(得分:1)
Object.assign
仅执行浅合并。为此,您可以使用lodash merge来递归合并对象。
答案 1 :(得分:0)
Object.assign
仅分配第一级时,您可以迭代对象的条目并分配值或为对象分配嵌套的分配值。
function deeperAssign(a, b) {
Object
.entries(b)
.forEach(([k, v]) => a[k] = v && typeof v === 'object'
? deeperAssign(a[k] = a[k] || {}, v)
: v
);
return a;
}
var result = deeperAssign(
{ first_level: { second_level: { changeme: 'not changed bruh', PEACH: 'PLEASE SAVE ME!' } }, hehe: 'I will stay here' },
{ first_level: { second_level: { change: 'Changed B]', addme: 'Extra prop' } }, huh: 'I want to join the party' }
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }