有什么办法可以同时使用三元运算符在javascript对象中同时初始化键和值?

时间:2018-08-02 02:07:00

标签: javascript syntax initialization javascript-objects

例如,我希望一个JavaScript对象根据a == 0设置不同的键值:

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"
};

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

2 个答案:

答案 0 :(得分:0)

当存在多个条件和通用值时,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);

答案 1 :(得分:-1)

恐怕没有。因为可以将对象用作键,所以如果这样编写,计算机将无法识别您真正想要的东西。例如:

var t = {name:'y'};
var m = {t};

您错过了价值吗?

var m = {t:'expert'}

或者您只想m = t

var m = {name:'y'}

可能会感到困惑。