Object.assign()保留所有未固定值

时间:2018-10-18 10:53:31

标签: javascript object variable-assignment

我在使用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>';

2 个答案:

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