看了 @二师兄 的 编程竞赛 - 数组父子关系的转换
花了一段时间实现了一下 实现完后简单看了一下代码
发觉递归的循环次数太多了 短短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)