层次遍历

作者: 站着瞌睡 | 来源:发表于2018-04-16 12:07 被阅读0次

var layer = function (obj, chart = '/') {

  let result = []

  function goIn (ob) {

    if (Array.isArray(ob)) {

      return

    }

    return ob && ob instanceof Object && Object.keys(ob).length

  }

  function getTopArr (ob, p) {

    let arr = []

    for (let k in ob) {

      arr.push({k, v: ob[k], p})

    }

    return arr

  }

  if (goIn(obj)) {

    let stack = getTopArr(obj, '')

    while (stack.length) {

      let item = stack.shift()

      if (goIn(item.v)) {

        stack = getTopArr(item.v, item.p +chart + item.k).concat(stack)

      } else {

        result.push(item)

      }

    }

  }

  return result

}

const originData1 = {

  a: {

    b: {

      c: {

        d: {

          e: 1,

          f: 2,

          g: 3

        }

      }

    },

    x: 1,

    y: 2,

    z: {

      a: 1,

      b: [

        {

          o: 1,

          p: 2,

          q: [ 1, 2, 3 ]

        }

      ],

      c: {

        d: {

          e: 1,

          g: 2

        }

      }

    }

  },

  q: [ 1, 2, 3 ],

  b: 1,

  c: {

    d: 1

  }

}

let arr = layer(originData1)

arr.forEach(function(item){

  console.log(item.p+'/'+item.k, ':', item.v)

})

相关文章

网友评论

    本文标题:层次遍历

    本文链接:https://www.haomeiwen.com/subject/gcoskftx.html