jknife
Version:
javaScript工具库
32 lines (30 loc) • 767 B
JavaScript
/**
* @description 数组转树结构
* @param {Array} arr 数组
* @param {Any} parentId 根节点父ID 默认0
* @return {Object}
* @interactive
*
* @example
* console.log(arrayToTree([{ id: 1, parentId: 0 },{ id: 2, parentId: 1 },{ id: 3, parentId: 1 },{ id: 4, parentId: 2 }]))
*/
function arrayToTree (arr, rootParentId = 0) {
const map = {}
const roots = []
let node
let i
for (i = 0; i < arr.length; i += 1) {
map[arr[i].id] = i
arr[i].children = []
}
for (i = 0; i < arr.length; i += 1) {
node = arr[i]
if (node.parentId === rootParentId) {
roots.push(node)
} else if (map[node.parentId] !== undefined) {
arr[map[node.parentId]].children.push(node)
}
}
return roots
}
export default arrayToTree