将元素推入数组时如何使用三元运算符

时间:2019-04-19 07:29:05

标签: javascript ecmascript-6 ecmascript-5

我正在尝试根据条件将对象添加到数组中。

我的期望是在满足条件时添加两个对象,但是我只会添加最后一个添加的对象(缺少其元素)。

const country = ‘USA’

citizenArray.push([
          {
            label: ‘Alex’,
            value: ’32’,
          },
          country === ‘USA’
            ? ({
                label: ‘John’,
                value: ’28’,
              },
              {
                label: ‘Miller’,
                value: ’40’,
              })
            : {
                label: ‘Marsh’,
                value: ’31’,
              },
        ]);

我得到的输出:

[{
            label: ‘Alex’,
            value: ’32’,
          },
{
                label: ‘Miller’,
                value: ’40’,
              }]

预期:

[{
            label: ‘Alex’,
            value: ’32’,
          },
{
                label: ‘John’,
                value: ’28’,
              },
{
                label: ‘Miller’,
                value: ’40’,
              }]

有人可以帮我指出我做错了什么地方吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

在Javascript中,当您放置comma-separated expressions within parathesis时,它将执行每个(从左到右)并返回last的结果。

在您的情况下,({ label: 'John', value: '28',}, { label: 'Miller', value: '40',})仅产生最后一个对象{ label: ‘Miller’, value: ’40’, }并添加到数组中。

要使其能够使用数组,然后使用spread syntax来添加它们。

const country = 'USA';
const citizenArray = [];
citizenArray.push([{
    label: 'Alex',
    value: '32',
  },
  ...(country === 'USA' ? [{
    label: 'John',
    value: '28',
  }, {
    label: 'Miller',
    value: '40',
  }] : [{
    label: 'Marsh',
    value: '31',
  }])
]);

console.log(citizenArray);

答案 1 :(得分:0)

只需使用不同的逻辑,如下所示:

const country = "USA";
let citizenArray = [];
citizenArray.push([{ label: "Alex", value: "32" }, ...(country == "USA" ? [{ label: "John", value: "28" }, { label: "Miller", value: "40" }] : [{ label: "Marsh", value: "31" }])]);
console.log(citizenArray);
.as-console-wrapper { max-height: 100% !important; top: auto; }