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; }