SOURCE

// 数组转树
let data = [
  { id: 0, parentId: null, name: '生物' },
  { id: 1, parentId: 0, name: '动物' },
  { id: 2, parentId: 0, name: '植物' },
  { id: 3, parentId: 0, name: '微生物' },
  { id: 4, parentId: 1, name: '哺乳动物' },
  { id: 5, parentId: 1, name: '卵生动物' },
  { id: 6, parentId: 2, name: '种子植物' },
  { id: 7, parentId: 2, name: '蕨类植物' },
  { id: 8, parentId: 4, name: '大象' },
  { id: 9, parentId: 4, name: '海豚' },
  { id: 10, parentId: 4, name: '猩猩' },
  { id: 11, parentId: 5, name: '蟒蛇' },
  { id: 12, parentId: 5, name: '麻雀' }
];

function transTree(data) {
    // 验证是否为数组类型
    if(!Array.isArray(data)) return[];
    let result = [];
    let map = {};
    // 建立每个数组元素id和该对象的关系
    data.forEach(item => {
        map[item.id] = item;
    })
    data.forEach(item => {
        let parent = map[item.parentId];
        if(parent) {
            // 元素有父节点,将元素放在父节点的children下面
            (parent.children || (parent.children = [])).push(item);
        }else {
            // 该元素为根节点
            result.push(item);
        }
    })
    return result;
}
console.log(JSON.stringify(transTree(data)));

//树转数组
// let node = {
//     "id": 0,
//     "parentId": null,
//     "name": "生物",
//     "children": [{
//         "id": 1,
//         "parentId": 0,
//         "name": "动物",
//         "children": [{
//             "id": 4,
//             "parentId": 1,
//             "name": "哺乳动物",
//             "children": [{
//                 "id": 8,
//                 "parentId": 4,
//                 "name": "大象"
//             }, {
//                 "id": 9,
//                 "parentId": 4,
//                 "name": "海豚"
//             }, {
//                 "id": 10,
//                 "parentId": 4,
//                 "name": "猩猩"
//             }]
//         }, {
//             "id": 5,
//             "parentId": 1,
//             "name": "卵生动物",
//             "children": [{
//                 "id": 11,
//                 "parentId": 5,
//                 "name": "蟒蛇"
//             }, {
//                 "id": 12,
//                 "parentId": 5,
//                 "name": "麻雀"
//             }]
//         }]
//     }, {
//         "id": 2,
//         "parentId": 0,
//         "name": "植物",
//         "children": [{
//             "id": 6,
//             "parentId": 2,
//             "name": "种子植物"
//         }, {
//             "id": 7,
//             "parentId": 2,
//             "name": "蕨类植物"
//         }]
//     }, {
//         "id": 3,
//         "parentId": 0,
//         "name": "微生物"
//     }]
// }
// function transArr(node) {
//     let queue = [node]
//     let data = [];
//     while(queue.length !== 0) {
//         // 取出当前队列中的第一个元素
//         let item = queue.shift();
//         data.push({
//             id: item.id,
//             parentId: item.parentId,
//             name: item.name
//         });
//         let children = item.children // 取出该节点的孩子
//         if (children) { 
//             for (let i = 0; i < children.length; i++) {
//                 queue.push(children[i]) //将子节点加入到队列尾部
//             }
//         }
//     }
//     return data;
// }
// console.log(transArr(node));
console 命令行工具 X clear

                    
>
console