Просто еще одно решение, сохраняющее исходную сигнатуру функции, предоставленную OP:
function union(...arrays) {
return Array.from(new Set([...arrays].flat()));
}
console.log(union([5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]));
Или, еще короче (но менее удобное для чтения):
return [...(new Set([...arrays].flat()))];
Объяснение:
Array.from
принимает Iterable в качестве аргумента, это создаст новый массив из исходного. [...arrays]
распространяетмассивы (аргумент) в новый, одиночный, один (Таким образом, он становится массивом массивов) -> [5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]
становится: [[5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]]
.flat
сглаживает массив, делая массив значений довольночем массив массивов значений -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat -> [[5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]]
становится [5, 10, 15, 15, 88, 1, 5, 7, 100, 15, 10, 1, 5]
new Set
удаляет дубликаты из массива и возвращает Iterable https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set. ->[5, 10, 15, 15, 88, 1, 5, 7, 100, 15, 10, 1, 5]
становится экземпляром Set (итерируемым) без дубликатов.Затем Array.from преобразует Set (Iterable) в обычный массив.Дополнительная информация здесь: Как преобразовать Set в Array?
ВНИМАНИЕ: Array.flat
в настоящее время является экспериментальной функцией (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat). Решение без использования плоских значений ниже:
function union(...arrays) {
return Array.from(new Set([].concat.apply([],[...arrays])));
}
console.log(union([5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]));
Пояснение (только отличия от вышеуказанных):
- Вместо .flat мы применяем к
Array.concat
наш исходный массив, чтобы он сгладил его, передав новый массивв качестве this
и предоставления нашего массива в качестве аргумента: [].concat.apply([],[...arrays])
Фрагмент: http://jsfiddle.net/briosheje/y03osape/2/
Фрагмент без .flat
: http://jsfiddle.net/briosheje/y03osape/4/