Деструктуризация массива с помощью троичного оператора - PullRequest
0 голосов
/ 26 ноября 2018

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

Возможно, в нем есть ошибка, но это мои три попытки:

let a = 'abcdefg'
// First try
[...new Set([...[], ...(typeof(a) == 'string'? [a]: a))]
// Second try
[...new Set([...[], [(typeof(a) == 'string'? ...[a]: ...a)]]
// Third try
[...new Set([...[], (typeof(a) == 'string'? ...[a]: ...a)]

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вместо спреда вы можете использовать Array.concat(), поскольку он обрабатывает комбинированные массивы и значения одинаково:

const a = 'abcdefg'
console.log([...new Set([].concat([], a))])
console.log([...new Set([].concat([], [a]))])
0 голосов
/ 26 ноября 2018

Если я правильно понимаю, если параметр a является строкой, а не коллекцией, поиск уникальных значений и необходимость в множестве являются спорными.Тогда вы можете замкнуть накоротко как typeof a === 'string' ? [a] : [...new Set(a)]

let a = 'abcdefg'

const createArr = a => typeof a === 'string' ? [a] : [...new Set(a)];

console.log(createArr(a));
console.log(createArr([a,a,'aa']));
0 голосов
/ 26 ноября 2018

Вместо

[...new Set([...[], ...(typeof a === 'string' ? [a] : a))]

возьмите, смотрите круглые, квадратные, круглые и ограничительные скобки в конце.

[...new Set([...[], ...(typeof a === 'string' ? [a] : a)])]
//                                                      ^

let a = 'abcdefg'

console.log([...new Set([...[], ...(typeof a === 'string' ? [a] : a)])]);
...