// 情況一:
// 數據源
var egs = [ {name_1: 'name_1...'}, {name_2: 'name_4...'}, {name_3: 'name_3...'}, {name_0: 'name_0...'}, ].reverse()
// 最終想要的數據形式 // {name_1: 'name_1...',
// children: [
// {name_2: 'name_2...',
// children: [
// {name_3: 'name_3...'},
// ]
// }
// ]
// }
var result = {} var key ='children' s(egs) function s(arrs) { arrs.forEach((o, i) => { console.log('---'+ i + ': ', result) if (!result[key]) { result[key] = [o] } else { o[key] = [result] result = o } }) } console.log(result)
// 情況二:
// pId 對應父級 id
let arr = [
{ pId: '-1', id: '0', name: '父級1' },
{ pId: '0', id: '1', name: '父級1-1' },
{ pId: '0', id: '2', name: '父級1-2' },
{ pId: '2', id: '21', name: '子級21' },
]
function buildTree (arr) {
let temp = {}
let tree = {}
// 數組轉 鍵值對
arr.forEach(item => {
temp[item.id] = item
})
let tempKeys = Object.keys(temp)
tempKeys.forEach(key => {
// 獲取當前項
let item = temp[key]
// 當前項 pId
let _itemPId = item.pId
// 獲取父級項
let parentItemByPid = temp[_itemPId]
if (parentItemByPid) {
if (!parentItemByPid.children) {
parentItemByPid.children = []
}
parentItemByPid.children.push(item)
} else {
tree[item.id] = item
}
})
// 對象轉數組並返回
return Object.keys(tree).map(key => tree[key])
}
