在对象中创建键时,我们如何避免if else?

时间:2017-10-12 00:51:45

标签: javascript

假设我有一个对象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而不会创建不必要的密钥。

2 个答案:

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