По моему мнению. Я должен запускать next
функцию во много раз, под кодом ниже.
среда кода: браузер Google Chrome. версия: 63.0.3239.132.
const a = [1,2,3,[4,5],6,[7,8]];
function *fun(array){
for(let i = 0;i<array.length;i++){
if(Array.isArray(array[i])){
yield *fun(array[i]);
}
}
}
console.log(fun(a).next().done);//true
Обычно в генераторах действует только один yield
Он должен выполнить дважды next
функцию, а затем done
true
.
Например:
function *foo() {
yield 1;
}
const iterator = foo();
console.log(iterator.next().done);//false
console.log(iterator.next().done);//true
Почему в рекурсии Пример, он запускается только один раз, а затем итератор?
Кстати, это сомнение из книги, имя которой - " You-Dont-Know-JS
в chapter 3
.
Вам не хватает инструкции yield
для элементов, которые не являются массивами:
const a = [1,2,3,[4,5],6,[7,8]];
function *fun(array){
for(let i = 0;i<array.length;i++){
if(Array.isArray(array[i])){
yield *fun(array[i]);
} else { // if the item is not an array
yield array[i];
}
}
}
const f = fun(a);
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
;
после}
из предложения if?