原理:
(1)利用generator函数返回遍历器对象的特性。
(2)利用genrater对象暂停执行的状态机机制
var arr = [1, [[2, 3], 4], [5, 6]];
var flat = function* (a) {
var length = a.length;
for (var i = 0; i < length; i++) {
var item = a[i];
if (typeof item !== 'number') {
//如果数组成员不是数字型,就在当前状态暂停执行,回调当前数组对象,此时循环停止,将在下一个next触发的时候继续执行
yield* flat(item);
} else {
//如果是数字,就将其返回,该函数状态机并且暂停执行
yield item;
}
}
};
for (var f of flat(arr)) {
console.log(f);
}
// 1, 2, 3, 4, 5, 6