Преобразование ES6 итерации в массив

Скажите, что у вас есть массив Javascript ES6 Iterable, который вы знаете заранее, будет конечным по длине, что лучший способ преобразовать его в массив Javascript?

Причиной этого является то, что многие js-библиотеки, такие как underscore и lodash, поддерживают только массивы, поэтому, если вы хотите использовать любую из своих функций в Iterable, его сначала нужно преобразовать в массив.

В python вы можете просто использовать функцию list(). Есть ли эквивалент в ES6?

Ответ 2

Вы можете использовать метод Array.from, который добавляется в ES6, но поддерживает только массивы и итерируемые объекты, такие как Карты и наборы (также входящие в ES6), Для обычных объектов вы можете использовать метод Underscore toArray или метод lodash toArray, поскольку обе библиотеки действительно имеют большую поддержку объектов, а не только массивов. Если вы уже используете подчеркивание или lodash, то, к счастью, они могут справиться с этой проблемой, наряду с добавлением различных функциональных концепций, таких как карта и сокращение для ваших объектов.

Ответ 3

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

let arr = [];
for (let elem of gen(...)){
    arr.push(elem);
}

Или "жесткий путь" с использованием функции генератора ES5 + (Fiddle работает в текущем Firefox):

var squares = function*(n){
    for (var i=0; i<n; i++){
        yield i*i;
    }
}

var arr = [];
var gen = squares(10);
var g;
while(true){
    g = gen.next();
    if (g.done){
        break;
    }
    arr.push(g.value);
}

Оба подхода, конечно же, не рекомендуются и являются просто доказательством концепции.