數(shù)據(jù)如下
var data = [
{id: 1, parentId: 0, name: '第一級菜單A' },
{id: 2, parentId: 0, name: '第一級菜單B' },
{id: 3, parentId: 1, name: '第二級菜單A' },
{id: 4, parentId: 1, name: '第二級菜單B' },
{id: 5, parentId: 3, name: '第三級菜單A' },
{id: 6, parentId: 3, name: '第三級菜單B' },
{id: 7, parentId: 4, name: '第三級菜單C' },
{id: 8, parentId: 4, name: '第三級菜單D' },
{id: 9, parentId: 2, name: '第二級菜單C' },
{id: 10, parentId: 2, name: '第二級菜單D' },
{id: 11, parentId: 2, name: '第二級菜單E' }
]
需要轉(zhuǎn)換的結(jié)果

代碼如下
function array2tree(arr){
var top = [], sub = [], tempObj = {};
arr.forEach(function(item){
if(item.parentId === 0){ // 頂級分類
top.push(item)
}else{
sub.push(item) // 其他分類
}
item.children = []; // 默然添加children屬性
tempObj[item.id] = item // 用當(dāng)前分類的id做key,存儲在tempObj中
})
sub.forEach(function (item) {
// 取父級
var parent = tempObj[item.parentId] || {'children': []}
// 把當(dāng)前分類加入到父級的children中
parent.children.push(item)
})
return top
}