Object.assign() 保留所有未更改的值
Object.assign() keep all the unchaged values
我用的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>';
Object.assign
仅进行浅层合并。您可以为此使用 lodash merge 它会递归合并对象。
虽然 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; }
我用的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>';
Object.assign
仅进行浅层合并。您可以为此使用 lodash merge 它会递归合并对象。
虽然 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; }