UNPKG

jknife

Version:
32 lines (30 loc) 767 B
/** * @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