JS数组嵌套

新手上路,请多包涵

数组一:
`[

    {
        "id": "1",
        "mid": "01",
        "title": "用户管理",
        "submain": ""
    },
    {
        "id": "2",
        "mid": "02",
        "title": "权限管理",
        "submain": ""
    }

]`

数组二:
`[

        {
            "submid": "01",
            "ename": "用户列表"
        },
        {
            "submid": "02",
            "ename": "权限用户"
        },
        {
            "submid": "02",
            "ename": "权限列表"
        }

]`

需要合成的数组三:
`[

    {
        "id": "1",
        "mid": "01",
        "title": "用户管理",
        "submain": 
        {
            "submid": "01",
            "ename": "用户列表"
        }
    },
    {
        "id": "2",
        "mid": "02",
        "title": "权限管理",
        "submain": 
        {
            "submid": "02",
            "ename": "权限用户"
        },
        {
            "submid": "02",
            "ename": "权限列表"
        }
    }

]`

已知数组一和数组二,用Js合成数组三.有没有大佬贴一下代码..蟹蟹

阅读 2k
2 个回答
var arr1 = [
    {
        "id": "1",
        "mid": "01",
        "title": "用户管理",
        "submain": ""
    },
    {
        "id": "2",
        "mid": "02",
        "title": "权限管理",
        "submain": ""
    }
]

var arr2 = [
        {
            "submid": "01",
            "ename": "用户列表"
        },
        {
            "submid": "02",
            "ename": "权限用户"
        },
        {
            "submid": "02",
            "ename": "权限列表"
        }
]

var arr3 = arr1.map(v => {
    const obj = {...v}
    const childArr = arr2.filter(item => item.submid === v.mid)
    obj.submain = childArr
    return obj
})
var arr1 = [

    {
        "id": "1",
        "mid": "01",
        "title": "用户管理",
        "submain": ""
    },
    {
        "id": "2",
        "mid": "02",
        "title": "权限管理",
        "submain": ""
    }
];

var arr2 = [
    {
        "submid": "01",
        "ename": "用户列表"
    },
    {
        "submid": "02",
        "ename": "权限用户"
    },
    {
        "submid": "02",
        "ename": "权限列表"
    }
]

// 将数组二以 submid 做 key 形成一个分类对象
var classification = {}
arr2.forEach(element => {
    classification[element.submid] = classification[element.submid] || [];
    classification[element.submid].push(element)
})
// 输出 arr2:
// {
//     '01': [{ submid: '01', ename: '用户列表' }],
//     '02': [{ submid: '02', ename: '权限用户' }, { submid: '02', ename: '权限列表' }]
// }

// 遍历 arr1 每个 mid 都从上面的分类中拿到对应 key 的数组放入 submain
arr3 = arr1.map((element) => {
    var obj = { ...element }
    obj.submain = classification[obj.mid] || ""
    return obj
})
// arr3 输出:
// [{
//     "id": "1",
//     "mid": "01",
//     "title": "用户管理",
//     "submain": [{
//         "submid": "01",
//         "ename": "用户列表"
//     }]
// }, {
//     "id": "2",
//     "mid": "02",
//     "title": "权限管理",
//     "submain": [{
//         "submid": "02",
//         "ename": "权限用户"
//     }, {
//         "submid": "02",
//         "ename": "权限列表"
//     }]
// }]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏