var data = [ {id:100000, name :"1", pid :0}, {id:100100, name :"1-1", pid :100000, }, {id:100101, name :"1-1-1", pid :100100, }, {id:200000, name :"2", pid :0, }, {id:210000, name :"2-1", pid :200000, }, {id:211000, name :"2-1-1", pid :210000, }, {id:211100, name :"2-1-1-1", pid :211000, }, {id:211110, name :"2-1-1-1-1", pid :211100, }, {id:211111, name :"2-1-1-1-1-1", pid :211110, } ] function toTree(data) { // 刪除 全部 children,以防止屢次調用 data.forEach(function (item) { delete item.children; }); console.log(data) // 將數據存儲爲 以 id 爲 KEY 的 map 索引數據列 var map = {}; data.forEach(function (item) { map[item.id] = item; }); console.log(map); var val = []; data.forEach(function (item) { // 以當前遍歷項,的pid,去map對象中找到索引的id var parent = map[item.pid]; console.log(parent); debugger // 好繞啊,若是找到索引,那麼說明此項不在頂級當中,那麼須要把此項添加到,他對應的父級中 if (parent) { (parent.children || ( parent.children = [] )).push(item); console.log(data,val); } else { //若是沒有在map中找到對應的索引ID,那麼直接把 當前的item添加到 val結果集中,做爲頂級 val.push(item); } }); return val; } console.log(toTree(data))