js对象数组根据某个字段分组

js原数组数据

 [
    { id: '1001', name: '值1', value: '111' },
    { id: '1001', name: '值1', value: '11111' },
    { id: '1002', name: '值2', value: '25462' },
    { id: '1002', name: '值2', value: '23131' },
    { id: '1002', name: '值2', value: '2315432' },
    { id: '1003', name: '值3', value: '333333' },
]

数组分组结果

[
    {
        id: '1001',
        data: [
            { id: '1001', name: '值1', value: '111' },
            { id: '1001', name: '值1', value: '11111' },
        ],
    },
    {
        id: '1002',
        data: [
            { id: '1002', name: '值2', value: '25462' },
            { id: '1002', name: '值2', value: '23131' },
            { id: '1002', name: '值2', value: '2315432' },
        ],
    },
    { id: '1003', data: [{ id: '1003', name: '值3', value: '333333' }] },
]

实现代码

let map = {}
let arr = [
    { id: '1001', name: '值1', value: '111' },
    { id: '1001', name: '值1', value: '11111' },
    { id: '1002', name: '值2', value: '25462' },
    { id: '1002', name: '值2', value: '23131' },
    { id: '1002', name: '值2', value: '2315432' },
    { id: '1003', name: '值3', value: '333333' },
]
for (let i = 0; i < arr.length; i++) {
    let ai = arr[i]
    if (!map[ai.id]) {
        map[ai.id] = [ai]
    } else {
        map[ai.id].push(ai)
    }
}
let res = []
Object.keys(map).forEach(key => {
    res.push({
        id: key,
        data: map[key],
    })
})

console.log(res)
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值