Как добавить элемент в массив, только если условие выполнено - PullRequest
0 голосов
/ 07 сентября 2018

Существует функция стрелки, создающая массив, подобный:

const myFunction = () => ["a", "b", "c"];

Я хочу добавить к нему аргумент, который должен добавить еще один элемент, если аргумент равен true.

Как здесь:

const myFunction = (arg) => ["a", "b", "c", arg ? "d" : null];

проблема с этим решением в том, что он все равно добавляет нулевой элемент, если arg !== true, но я не хочу ничего добавлять в этом случае.

Ответы [ 8 ]

0 голосов
/ 07 сентября 2018

Если вы храните свой массив в переменной, вы можете сделать это так:

const arr = ["a", "b", "c"];
const myFunction = arg => arg === true ? [...arr, "d"] : arr;

console.log(myFunction(true));
console.log(myFunction());
0 голосов
/ 07 сентября 2018

Вы можете использовать Array push () .

const myFunction = (arg) => {
  const arr = ["a", "b", "c"];
  if (arg) arr.push("d");
  return arr;
};

console.log(myFunction(true));
console.log(myFunction(false));
0 голосов
/ 07 сентября 2018

Ори имеет правильный ответ . Используйте это для всех современных браузеров. Если по какой-то причине вы все еще зависли в старом браузере -

["a", "b", "c"].concat(arg ? 'd' : [])
0 голосов
/ 07 сентября 2018

Вы также можете сделать это:

const myMethod = (arg) => {
   var tempArray = ["item 1", "item 2", "item 3"];

   !arg || tempArray.push("item 4");

   return tempArray;
};

console.log(myMethod(false));
console.log(myMethod(true));
0 голосов
/ 07 сентября 2018
const myFunction = (arg) => {
  ret = ['a', 'b', 'c']
  return arg === true ? ret.concat('d') : ret;
}

В других решениях у вас есть arg ? вместо arg === true ?. Если вы хотите, чтобы myFunction возвращал массив с 'd' ТОЛЬКО для arg = true, тогда вы должны использовать мой раствор. Если вы хотите, чтобы он возвращал 'd', например, arg = 17, но не возвращал его для arg = 0, используйте другое решение.

0 голосов
/ 07 сентября 2018

Вы можете использовать concat:

const myFunction = (arg) => ["a", "b", "c"].concat(arg ? ["d"] : []);

console.log(myFunction(true));
console.log(myFunction(false));
0 голосов
/ 07 сентября 2018

Вы можете сделать функцию немного длиннее,

  • создать временный массив,
  • добавить элемент во временный массив, если требуется,
  • и вернуть временный массив, когда закончите

const myFunction = (arg) => {
  var tempArray = ["a", "b", "c"];
  
  if (arg) {
    tempArray.push("d");
  }
  
  return tempArray;
};

console.log(myFunction(true) + "");
console.log(myFunction(false) + "");
0 голосов
/ 07 сентября 2018

Вы можете использовать массив распространения. В соответствии со значением arg пустой массив или массив, содержащий d, будет добавлен в массив результатов:

const myFunction = (arg) => ["a", "b", "c", ...arg ? ['d'] : []];

console.log(JSON.stringify(myFunction(true))); // ["a","b","c","d"]

console.log(JSON.stringify(myFunction())); // ["a","b","c"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...