根据数组中对象的某一属性分组,并添加额外信息

如下格式数组:

let mAll = [
    {name: '深圳', idc: 'sz'},
    {name: '北京', idc: 'bj'},
    {name: '上海', idc: 'sh'},
    {name: '广州', idc: 'gz'},
];

let list = [
    {idc: "sz",slave: "10.101.93.85:11215",id: 271},
    {idc: "sz",slave: "10.101.93.85:11215",id: 272},
    {idc: "bj",slave: "10.101.94.85:11215",id: 273},
    {idc: "sh",slave: "10.101.96.85:11215",id: 274},
    {idc: "sz",slave: "10.101.97.85:11215",id: 275},
    {idc: "bj",slave: "10.101.99.85:11215",id: 276},
    {idc: "sh",slave: "10.101.92.85:11215",id: 277},
]

请求怎么将slave按照idc分组,并填入对应的idc的name,如下

let newO = {
  sz: {
    name: '深圳',
    slave: [
        {idc: "sz",slave: "10.101.93.85:11215",id: 271},
        {idc: "sz",slave: "10.101.93.85:11215",id: 272},
        {idc: "sz",slave: "10.101.97.85:11215",id: 275},
    ]
  },
   bj: {
    name: '北京',
    slave: [
        {idc: "bj",slave: "10.101.94.85:11215",id: 273},
        {idc: "bj",slave: "10.101.99.85:11215",id: 276},
    ]
  },
   sh: {
    name: '上海',
    slave: [
        {idc: "sh",slave: "10.101.96.85:11215",id: 274},
        {idc: "sh",slave: "10.101.92.85:11215",id: 277},
    ]
  },
}
阅读 1.7k
1 个回答
let a = mAll.reduce((obj, item) => {
    let key = {name: item.name, slave: []}
    list.forEach(i => {
        if (i.idc === item.idc) key.slave.push(i)
    })
    if (key.slave.length) obj[item.idc] = key
    return obj
}, {})
console.log(a)
推荐问题