1. let data = [
    2. { id: 0, parentId: null, name: '生物' },
    3. { id: 1, parentId: 0, name: '动物' },
    4. { id: 2, parentId: 0, name: '植物' },
    5. { id: 3, parentId: 0, name: '微生物' },
    6. { id: 4, parentId: 1, name: '哺乳动物' },
    7. { id: 5, parentId: 1, name: '卵生动物' },
    8. { id: 6, parentId: 2, name: '种子植物' },
    9. { id: 7, parentId: 2, name: '蕨类植物' },
    10. { id: 8, parentId: 4, name: '大象' },
    11. { id: 9, parentId: 4, name: '海豚' },
    12. { id: 10, parentId: 4, name: '猩猩' },
    13. { id: 11, parentId: 5, name: '蟒蛇' },
    14. { id: 12, parentId: 5, name: '麻雀' }
    15. ];
    16. function transTree(data) {
    17. let result = []
    18. let map = {}
    19. if (!Array.isArray(data)) {//验证data是不是数组类型
    20. return []
    21. }
    22. data.forEach(item => {//建立每个数组元素id和该对象的关系
    23. map[item.id] = item //这里可以理解为浅拷贝,共享引用
    24. })
    25. data.forEach(item => {
    26. let parent = map[item.parentId] //找到data中每一项item的爸爸
    27. if (parent) {//说明元素有爸爸,把元素放在爸爸的children下面
    28. (parent.children || (parent.children = [])).push(item)
    29. } else {//说明元素没有爸爸,是根节点,把节点push到最终结果中
    30. result.push(item) //item是对象的引用
    31. }
    32. })
    33. return result //数组里的对象和data是共享的
    34. }
    35. transTree(data);
    36. // console.log(JSON.stringify(transTree(data)))

    ArrayToTree.js