Как использовать троичный оператор при вставке элементов в массив - PullRequest
2 голосов
/ 19 апреля 2019

Я пытаюсь добавить объекты в массив на основе условия.

Я ожидаю добавить два объекта при выполнении условия, но я получаю только последний добавляемый объект (его элемент отсутствует).

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 ]

1 голос
/ 19 апреля 2019

В Javascript, когда вы поместили выражения, разделенные запятыми, в parathesis , оно выполнит каждое (слева направо) и вернет результат last.

В вашем случае ({ label: 'John', value: '28',}, { label: 'Miller', value: '40',}) resultsтолько последний объект { label: ‘Miller’, value: ’40’, } и добавляет к массиву.

Чтобы заставить его работать, используйте массив, а затем используйте синтаксис расширения , чтобы добавить их.

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);
0 голосов
/ 19 апреля 2019

Просто используйте другую логику, например:

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