javascript one-dimensional array and tree data conversion

javascript one-dimensional array and tree data conversion

1. Convert the flattened array to a tree structure

Simulation data

let datas = [
    {
    
     label: '111', id: 1, parentid: 0 },
    {
    
     label: '222', id: 2, parentid: 0 },
    {
    
     label: '333', id: 3, parentid: 0 },
    {
    
     label: '22221', id: 21, parentid: 2 },
    {
    
     label: '22222221', id: 221, parentid: 21 },
    {
    
     label: '22222', id: 22, parentid: 2 },
    {
    
     label: '11111', id: 11, parentid: 1 },
    {
    
     label: '11112', id: 12, parentid: 1 }
]
function arrayToTreeData(data, idkey, pIdKey, children) {
    
    
    let key = idkey ? idkey : 'id';
    let parentKey = pIdKey ? pIdKey : 'parentid';
    let childKey = children ? children : 'children';
    let r = [];
    let tmpMap = [];
    for (let i = 0, l = data.length; i < l; i++) {
    
    
        data[i].key = data[i].id;
        data[i].label = data[i].label;
        tmpMap[data[i][key]] = data[i];
    }
    for (let i = 0, l = data.length; i < l; i++) {
    
    
        if (tmpMap[data[i][parentKey]] && data[i][key] != data[i][parentKey]) {
    
    
            if (!tmpMap[data[i][parentKey]][childKey]) {
    
    
                tmpMap[data[i][parentKey]][childKey] = [];
            }
            tmpMap[data[i][parentKey]][childKey].push(data[i]);
        } else {
    
    
            r.push(data[i]);
        }
    }
    return r;
}
console.log(arrayToTreeData(datas))

Insert picture description here

2. Tree to array

Simulation data

let datas = [{
    
    
        label: '111',
        id: 1,
        parentid: 0,
        children: [{
    
     label: '11111', id: 11, parentid: 1 },
            {
    
     label: '11112', id: 12, parentid: 1 }
        ]
    },
    {
    
    
        label: '222',
        id: 2,
        parentid: 0,
        children: [{
    
    
                label: '22221',
                id: 21,
                parentid: 2,
                children: [{
    
     label: '22222221', id: 221, parentid: 21 }, ]
            },
            {
    
     label: '22222', id: 22, parentid: 2 },
        ]
    },
    {
    
     label: '333', id: 3, parentid: 0 },
]
function treeToList(value) {
    
    
    let nodes = value,
        _nodes = [];
    _nodes = _nodes.concat(...nodes);
    nodes.forEach(n => {
    
    
        getArray(n, _nodes);
    });
    return _nodes;
}

function getArray(node, nodes) {
    
    
    if (node['children'] && node['children'].length) {
    
    
        nodes.push(...node['children']);
        node['children'].forEach(n => getArray(n, nodes));
    }
}
console.log(treeToList(datas))

Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_43881166/article/details/115329305