假设我有一个对象obj={}
和另一个对象x={a:1 , b: 2}
,我只想在不使用if / else块的情况下创建一个密钥。
例如
if ( x.a)
obj.a = 1
if ( x.b)
obj.a = 1
...
我使用的方法是
obj.a = x.a ||空;
在这种情况下obj.a = 1
但如果我使用(当对象x中不存在p1属性时)
obj.p1 = x.p1 || null
obj.c = null
将被创建。在这种情况下,c被不必要地创建
是否有任何解决方案可以避免if / else而不会创建不必要的密钥。
答案 0 :(得分:4)
如果您正在使用ES6,您可能会从Object.assign
中受益。
var o1 = { a: 5 };
var o2 = { a: 13, b: 12 };
var o3 = { c: 7 };
var o = Object.assign(o1, o2, o3); // { a: 13, b: 12, c: 7 }
可在MDN上找到填充物。
答案 1 :(得分:2)
是否有任何解决方案可以避免if / else而不会创建不必要的密钥。
由于作业是一种表达方式,因此在技术上可能会滥用"副作用的布尔AND运算符:
(x.a || x.b) && (obj.a = 1);
但你可能不应该这样做,因为这会让你的代码更难理解。 if
语句明确且清晰。
如果您确实要将复制属性从一个对象复制到另一个对象,请参阅Christopher Harris's answer。