如何优雅的实现数组的重组

根据某一字段的值进行分类重组

源数据:

var _arr = [{    aId: 1,    bId: 11,    cId: 112,
}, {    aId: 1,    bId: 11,    cId: 113,
}, {    aId: 1,    bId: 12,    cId: 114,
}, {    aId: 2,    bId: 21,    cId: 211,
}]

期望:

[{
    aId: 1,
    children: [{
        bId: 11,
        children: [{
            cId: 112
        }, {
            cId: 113
        }]
    }, {
        bId: 12,
        children: [{
            cId: 114
        }]
    }]
}, {
    aId: 2,
    children: [{
        bId: 21,
        children: [{
            cId: 211
        }]
    }]
}]


凤凰求蛊
浏览 607回答 1
1回答

缥缈止盈

function rebuild (arr, key) {  let res = []  let keycopy = JSON.parse(JSON.stringify(key))  let k = keycopy.shift()  while (arr.length) {    let obj = {}     obj[k] = arr[0][k]    let arrcopy = JSON.parse(JSON.stringify(arr))     obj.children = arrcopy.filter(val => val[k] === obj[k]).map(val => {      delete val[k]      return val     })     res.push(obj)     arr = arr.filter(val => val[k] !== obj[k])   }  return res.map(val => keycopy.length ? {     ...val,    children: rebuild(val.children, keycopy)   } : val) } rebuild(_arr,['aId','bId'])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript