首页 > 解决方案 > 有没有办法在具有三元运算符的javascript对象中同时初始化键和值?

问题描述

例如,我想要一个根据 a==0 具有不同键值的 javascript 对象:

var v=a==1?{
  "a":"1",
}:{
  "b":"2",
};

我想简化为:

var v={
  a==1?("a":"1"):("b":"2"),
};

因此对于更多条件:

var v={
  a==1?("a":"1"):("b":"2"),
  c==1?("c":"3"):("d":"4"),
  .
  .
  .
  "commonKey1":"commonValue1",
  "commonKey2":"commonValue2"
};

哪个使用三元运算符同时初始化键和值,但我尝试了上面的语法并且它不起作用,是否有任何正确的语法可以做到这一点?

标签: javascriptsyntaxinitializationjavascript-objects

解决方案


当有多个条件和共同值时,Object.assign可能是最清晰的方法:

const a = 2;
const c = 1;
const v = Object.assign({ commonKey1: 'commonValue1', commonKey2: 'commonValue2' },
  a==1?{"a":"1"}:{"b":"2"},
  c==1?{"c":"3"}:{"d":"4"}
);
console.log(v);

另一种可能性(看起来更丑的 IMO)是将条件运算符返回的对象传播到父对象中:

const a = 1;
const v = {
  foo: 'bar',
  ...(a==1? {"a":"1"}:{"b":"2"})
};
console.log(v);


推荐阅读