all files / array2tree/ index.js

91.3% Statements 21/23
87.5% Branches 7/8
100% Functions 1/1
90.91% Lines 20/22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                   
/*
 * Convert array to tree, array item id is related pid.
 * put child item into children field;
 * @params {Array} arr = [{id:1,pid:0,name:'level 1'},{id:2,pid:1,name:'level 2'},...]
 * @return {Array}
 * */
 
function array2tree(arr) {
    if (!Array.isArray(arr)) {
        console.error('params arr need Array');
        return false;
    }
    let hasError = false;
    arr.forEach((v, i)=> {
        if (!('id' in v)) {
            console.error(`params index ${i} has not key 'id'`);
            hasError = true;
        }else Iif(!('pid' in v)){
            console.error(`params index ${i} has not key 'pid'`);
            hasError = true;
        }
    });
    if(hasError){return false;}
 
    let map = {};
    arr.forEach(v=> {
        v.children = [];
        map[v.id] = v;
    });
    map[0] = {id: 0, name: 'root', children: []};
    arr.forEach(v=> {
        map[v.pid].children.push(v);
    });
    return map[0].children;
}
 
module.exports = array2tree;