kitewhere / practice

练习
0 stars 0 forks source link

#91 数组拍平(二) #6

Open kitewhere opened 6 years ago

kitewhere commented 6 years ago

编写一个 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

kitewhere commented 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 无效