#91 数组拍平(二)


  • 0
    administrators

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

  • 0
    管理员

    function* flatten2(arr) {
    	arr = arr.length ? arr.toString().split(',').map(x => Number.parseInt(x)) : []
    	for(let o of arr) yield o 
    }
    
    

  • 0

    let arr = [1, 2, [3, 4], [5, 6], [8, 9], [10, 11, [12]]]
          let newArr = []
          function* flat (arr) {
            for (let i = 0; i < arr.length; i++) {
              if (Array.isArray(arr[i])) {
                yield * flat(arr[i])
              } else {
                newArr.push(arr[i])
              }
            }
          }
          flat(arr).next()
    

  • 0

    @陈小俊#91 数组拍平(二) 中说:

    function* flatten2(arr) {
    arr = arr.length ? arr.toString().split(',').map(x => Number.parseInt(x)) : []
    for(let o of arr) yield o
    }
    let arr = [1, 2, [3, 4], [5, 6], [8, 9], [10, 11, [12]]]
    let newArr = []
    function* flat (arr) {
    for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
    yield * flat(arr[i])
    } else {
    newArr.push(arr[i])
    }
    }
    }

    也可以实现


  • 0
    管理员

    @cod我 条条大道通罗马


  • 0

    function *flatten2 (arr) {
      /* TODO */
      const rarr = [];
      
      function flatten(ar) {
        ar.map(n => {
          if (Array.isArray(n)) {
            flatten(n);
          } else {
            rarr.push(n);
          }
        })  
      }
      flatten(arr);
      for (let i = 0; i < rarr.length; i ++) {
        yield rarr[i]
      }
    }
    

  • 4

    我是看了别人的答案才弄明白generator的,es6越来越有趣了

    function *flatten2 (arr) {
      for(let a of arr) {
        Array.isArray(a) ? yield* flatten2(a) : yield a
      }
    }
    

  • 0

    function *flatten2 (arr) {
      /* TODO */
         let len = arr.length;
         for (var i = 0 ;i < len; i++) {
          if (typeof arr[i] == 'object') {
            yield* flatten2(arr[i]);
          } else {
            yield arr[i];
          }
     }
    

  • 0

    非递归方法……

    function* flatten2(arr) {
        /* TODO */
        let s = [arr]
        let q = arr
        while (q || s.length) {
            let item = q.shift()
            if (Array.isArray(item)) {
                s.push(q)
                q = item
            } else if (item !== undefined) yield item
            if (!q.length) q = s.pop()
        }
        return
    }

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待