javascript经典面试题:数组遍历拍平结果
题目:编写一个 JavaScript generator 函数,接受一个仅包含数字的 多维数组 ,返回一个迭代器,可以遍历得到它拍平以后的结果。例如:
const numbers = flatten2([1, [[2], 3, 4], 5])
numbers.next().value // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5
答案:
function *flatten2(arr) {
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
/* yield* 的使用可以大大简化程序编写 */
Array.isArray(item) ? yield* flatten2(item) : yield item;
}
}
/* 用 flatten2 来完成 flatten 也是很方便的 */
// const flatten = (arr) => [...flatten2(arr)]
THE END