Open kitewhere opened 6 years ago
一般来说递归调用可以解决问题
function *flatten2 (arr) {
for(let a of arr) {
Array.isArray(a) ? yield* flatten2(a) : yield a
}
}
但也又讨巧的解法
function* flatten2(arr) {
arr = arr.length ? arr.toString().split(',').map(x => Number.parseInt(x)) : []
for(let o of arr) yield o
}
Array.toString()
Array 对象覆盖了 Object 的 toString 方法。对于数组对象,toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。
对于 number string bool 这种简单类型没问题 但要特殊处理 比如 parseInt 而且只能是单一类型的数组 不然 ‘1’ 和 1 你怎么转换 对于 object 无效
编写一个 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