Ответ 1
Вы можете использовать Array.from или оператор распространения.
Пример:
let s = new Set();
s.add(1);
s.add(2);
s.add(3);
s.add(4);
let a = Array.from(s); // = [ 1, 2, 3, 4 ]
let b = [...s]; // = [ 1, 2, 3, 4 ]
Скажите, что у вас есть массив Javascript ES6 Iterable, который вы знаете заранее, будет конечным по длине, что лучший способ преобразовать его в массив Javascript?
Причиной этого является то, что многие js-библиотеки, такие как underscore и lodash, поддерживают только массивы, поэтому, если вы хотите использовать любую из своих функций в Iterable, его сначала нужно преобразовать в массив.
В python вы можете просто использовать функцию list(). Есть ли эквивалент в ES6?
Вы можете использовать Array.from или оператор распространения.
Пример:
let s = new Set();
s.add(1);
s.add(2);
s.add(3);
s.add(4);
let a = Array.from(s); // = [ 1, 2, 3, 4 ]
let b = [...s]; // = [ 1, 2, 3, 4 ]
Вы можете использовать метод Array.from, который добавляется в ES6, но поддерживает только массивы и итерируемые объекты, такие как Карты и наборы (также входящие в ES6), Для обычных объектов вы можете использовать метод Underscore toArray или метод lodash toArray, поскольку обе библиотеки действительно имеют большую поддержку объектов, а не только массивов. Если вы уже используете подчеркивание или lodash, то, к счастью, они могут справиться с этой проблемой, наряду с добавлением различных функциональных концепций, таких как карта и сокращение для ваших объектов.
Вы также можете сделать:
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);
}
Оба подхода, конечно же, не рекомендуются и являются просто доказательством концепции.