我想将两个对象合并到一个新对象中,如果两个对象都有它们,则覆盖一个对象。合并两个对象,但明确定义了可以设置的键
这对于ES6传播很容易,但在这种特殊情况下,我想使用一种仍然定义可以设置哪些密钥的方法。基本上创建一个在我的最终对象上允许的属性的“白名单”。 (利差,任何属性将被合并到新的对象中)。
有没有一种方法使用ES6 +来做到这一点?
两个对象:
var o1 = {
a: 'foo',
b: 'bar',
c: 'baz'
}
var o2 = {
a: 'pop',
bad_property: 'dont copy me'
}
var oMerged = {
a: 'pop', // I came from obj_2
b: 'bar',
c: 'baz'
}
合并方法:
// Method 1: Use spreads, problem is this hides the keys.
var oMerged = {
...o1,
...o2
};
// Method 2: Shows each key, but requires a ternary to check if obj_2 has the key.
var oMerged = {
a: (o2.a !== undefined) ? o2.a : o1.a,
b: (o2.b !== undefined) ? o2.b : o1.b,
c: (o2.c !== undefined) ? o2.c : o1.c
}
// Method 3: Define what keys can be merged, but use a more concise syntax/possibly an ES6+ feature.
???
编辑:显式表示,该对象应当具有可接受的性质的白名单。有很好的答案,但他们需要黑名单不可接受的属性。 “白名单”的原因是它向其他开发者展示了最终对象的形状。
你确定你不是在寻找[对象。分配(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)?你能解释一下你需要什么吗? –
再次查看Object.assign,但如果我没有记错,它会复制所有对象的所有枚举属性 - 因此它将包含obj_2中的'bad_property'。 –
看看这个:[JavaScript过滤对象](http://stackoverflow.com/questions/5072136/javascript-filter-for-objects) – trincot