Возвращает расширенный массив в функции стрелки - PullRequest
0 голосов
/ 01 января 2019

Давайте предположим, что у меня есть этот тип массива:

[ [1, 2], [3, 4] ]

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

[1, 2, 3, 4]

Я пытаюсь достичь этого функционально, поэтому код выглядит следующим образом:

const arr = [ [1, 2], [3, 4] ]
const f = Array.from(arr, x => ...x)

Но возникает ошибка Unexpected token ....Так как же это сделать правильно?

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Array.from создаст элемент для каждого элемента в переданном массиве. Он просматривает length переданного итерируемого и перебирает индексы, начиная с 0. Поэтому независимо от того, что вы делаете в обратном вызове (при условии, что это верно), вы получите массив длины 2, если передадите массив из двух элементов.

reduce(), вероятно, лучший вариант здесь:

let arr = [ [1, 2], [3, 4] ]

let flat = arr.reduce((arr, item) => [...arr, ...item])
console.log(flat)
0 голосов
/ 02 января 2019

Вы можете создать итератор для массива и распространить массив, используя другой генератор для вложенных массивов.

function* flat() {
    for (var item of this.slice()) {
        if (Array.isArray(item)) {
            item[Symbol.iterator] = flat;
            yield* item
        } else {
            yield item;
        }
    }
}

var array = [[1, 2], [3, 4, [5, 6]]];

array[Symbol.iterator] = flat;

console.log([...array]);
0 голосов
/ 01 января 2019

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

const inp = [ [1, 2], [3, 4] ];

console.log(inp.flat());

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

Как правильно указал @MarkMeyerв комментариях flat еще не поддерживается Edge и Internet Explorer.В этом случае вы могли бы пойти на решение с reduce:

const inp = [[1,2], [3,4]];
console.log(inp.reduce((acc, val) => acc.concat(...val), []));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...