Object.assign() 保留所有未更改的值[重复]
Posted
技术标签:
【中文标题】Object.assign() 保留所有未更改的值[重复]【英文标题】:Object.assign() keep all the unchaged values [duplicate] 【发布时间】:2019-03-23 04:00:12 【问题描述】:我使用 Object.assign 错了吗?
我认为它会替换这些值,但实际上它会覆盖它们......
例如'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>';
【问题讨论】:
它只是非递归的。如果你想要一个递归赋值,你必须自己编写代码。 它采用第一级属性并将其替换为第二级的值。 为什么不在提问前先阅读the docs? 【参考方案1】:Object.assign
只进行浅合并。您可以使用lodash merge,它会递归合并对象。
【讨论】:
【参考方案2】:虽然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() 保留所有未更改的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
javascript Javascript Object.assign Alternative。 mergeObject()方法用于从一个或多个复制所有可枚举的自有属性的值