js数据格式转换问题!求帮忙!

求各位帮帮忙,如何转换如下的两种类型的数据格式?

[
    {
        'name': 'level-1',
        'value': 'eve-1',
        'id': 'id-1',
        'parentId': null
    }, {
        'name': 'level-2',
        'value': 'eve-2',
        'id': 'id-2',
        'parentId': 'id-1'
    }, {
        'name': 'level-3',
        'value': 'eve-3',
        'id': 'id-3',
        'parentId': 'id-2'
    }, {
        'name': 'level-3',
        'value': 'eve-4',
        'id': 'id-4',
        'parentId': 'id-2'
    }, {
        'name': 'level-2',
        'value': 'eve-5',
        'id': 'id-5',
        'parentId': 'id-1'
    }
]

转换为:

[
    {
        'name': 'level-1',
        'value': 'eve-1',
        'id': 'id-1',
        'children': [
            {
                'name': 'level-2',
                'value': 'eve-2',
                'id': 'id-2',
                'children': [
                    {
                        'name': 'level-3',
                        'value': 'eve-3',
                        'id': 'id-3'
                    }, {
                        'name': 'level-3',
                        'value': 'eve-4',
                        'id': 'id-4'
                    }
                ]
            }, {
                'name': 'level-2',
                'value': 'eve-5',
                'id': 'id-5'
            }
        ]
    }
]
阅读 1.5k
1 个回答
let arr = [{
        'name': 'level-1',
        'value': 'eve-1',
        'id': 'id-1',
        'parentId': null
    }, {
        'name': 'level-2',
        'value': 'eve-2',
        'id': 'id-2',
        'parentId': 'id-1'
    }, {
        'name': 'level-3',
        'value': 'eve-3',
        'id': 'id-3',
        'parentId': 'id-2'
    }, {
        'name': 'level-3',
        'value': 'eve-4',
        'id': 'id-4',
        'parentId': 'id-2'
    }, {
        'name': 'level-2',
        'value': 'eve-5',
        'id': 'id-5',
        'parentId': 'id-1'
    }];




    let result = arr.reduce(function(prev, item) {
        let insert = {
            name: item.name,
            value: item.value,
            id: item.id
        }
        prev[item.parentId] ? prev[item.parentId].push(insert) : prev[item.parentId] = [insert];
        return prev;
    }, {});
    for (let prop in result) {
        result[prop].forEach(function(item, i) {
            result[item.id] ? item.children = result[item.id] : ''
        });
    }


    result = result[null];
    console.log(JSON.stringify(result));
    //[{"name":"level-1","value":"eve-1","id":"id-1","children":[{"name":"level-2","value":"eve-2","id":"id-2","children":[{"name":"level-3","value":"eve-3","id":"id-3"},{"name":"level-3","value":"eve-4","id":"id-4"}]},{"name":"level-2","value":"eve-5","id":"id-5"}]}]
推荐问题