【问题标题】:Is there any way to init BOTH key and value at the same time in javascript objects with ternary operator?有没有办法在具有三元运算符的javascript对象中同时初始化键和值?
【发布时间】:2018-08-02 02:06:59
【问题描述】:

例如,我想要一个根据 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"
};

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

【问题讨论】:

  • 有 ES6 语法的选项const a = 1; const b = 2; const c = a==1? {a}: {b} 但这取决于完整的场景来理解你想要完成的事情

标签: javascript syntax initialization javascript-objects


【解决方案1】:

当有多个条件和公共值时,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);

【讨论】:

    【解决方案2】:

    恐怕没有。因为一个对象可以用作钥匙,如果你这样写,计算机就无法识别你真正想要的东西。例如:

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

    你错过了价值吗?

    var m = {t:'expert'}
    

    或者你只想要m = t

    var m = {name:'y'}
    

    可能会混淆。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 2015-02-20
      • 1970-01-01
      • 2021-09-18
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多