美文网首页
编程竞赛 - 数组父子关系的转换

编程竞赛 - 数组父子关系的转换

作者: 坠入莱茵河 | 来源:发表于2017-11-27 15:11 被阅读0次

看了 @二师兄 的 编程竞赛 - 数组父子关系的转换

花了一段时间实现了一下 实现完后简单看了一下代码
发觉递归的循环次数太多了 短短8条数据就循环了72次
心想有什么可以优化的地方
思考了一下 里面的数据应该是没有重复的 那么用过的数据应该就不需要在遍历了

于是在循环之后删掉该条数据 循环的次数比原先降低了将近一半

深感优化的重要性

业务代码写多了 真的感觉算法好难写 @二师兄 也说了 这道题相对简单 但是也花了好多时间 感觉自己的逻辑还需要严谨

let array = [
  ['1', '', 'title1', 1, 2, 3],
  ['2', '', 'title2', 4, 5, 6],
  ['11', '1', 'title3', 7, 8, 9],
  ['21', '2', 'title4', 10, 11, 12],
  ['22', '2', 'title5', 13, 14, 15],
  ['111', '11', 'title6', 16, 17, 18],
  ['211', '21', 'title7', 19, 20, 21],
  ['2111', '211', 'title8', 22, 23, 24]
]

class ParseArray {
  constructor (inputArray) {
    this.inputArray = inputArray
    this.outputArray = [{
      "sub_data": []
    }]
    this.loopLength = 0
  }
  loop (pId, items) {
    this.inputArray.forEach((item, idx) => {
      this.loopLength++
      if (item[1] === pId) {
        items.push({
          main_data: item.slice(2),
          sub_data: []
        })
        delete this.inputArray[idx] // 录入后删掉该条数据 可降低循环次数
        this.loop(item[0], items[items.length - 1].sub_data)
      }
    })
  }
}

let date = new Date()
console.log(date)

let val = new ParseArray(array)

val.loop('', val.outputArray[0].sub_data)

console.log(val.outputArray)
console.log(val.loopLength)
console.log(new Date() - date)

相关文章

网友评论

      本文标题:编程竞赛 - 数组父子关系的转换

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