javascript: добавление элементов в массив по условию

подскажите, как можно поэлегантнее, без кучи строчек кода с if реализовать следующую задачу:

есть массив arr, есть 2 элемента value1 и value2, которые надо добавить в начало массива, если эти элементы определены (не равны undefined)

в лоб это выглядит как-то совсем неуклюже :)

вариант 1:

if (value2 !== undefined)
    arr = [value2, ...arr];

if (value1 !== undefined)
    arr = [value1, ...arr];

вариант 2:

arr = (value2 !== undefined) ? [value2, ...arr] : arr;
arr = (value1 !== undefined) ? [value1, ...arr] : arr;

а есть ли какой-нибудь однострочный способ, типа

arr = [(value1 !== undefined) ? value1 : none, (value2 !== undefined) ? value2 : none, arr];

?


Ответы (2 шт):

Автор решения: Алекс Данилин

let x = ['abc', 'qwert',]
let a;

x = !!a ? [a, ...x] : x
console.log(x)

a = 'sven'

x = !!a ? [a, ...x] : x
console.log(x)

→ Ссылка
Автор решения: vsemozhebuty

(Предполагаю, что все falsy значения кроме undefined допустимы. Если нет, можно упростить условия ниже).

Можно так:

const array = ['foo'];

const a = 'bar';
const b = undefined;

array.unshift(
  ...(a !== undefined ? [a] : []),
  ...(b !== undefined ? [b] : []),
);

console.log(array);

Если нужно с перезаписью переменной, то так:

let array = ['foo'];

const a = 'bar';
const b = undefined;

array = [
  ...(a !== undefined ? [a] : []),
  ...(b !== undefined ? [b] : []),
  ...array
];

console.log(array);

→ Ссылка