数组数据处理--按某个key筛选数组,value相同的合并为一个数组

有时候,某个请求返回的数据是很杂乱的,需要按照一些规则重新排列组合。

例:这样的数据:

var list=[
    {"companyId":1,"companyName":"公司一","name":"张春"},
    {"companyId":1,"companyName":"公司一","name":"王夏"},
    {"companyId":2,"companyName":"公司二","name":"李秋"},
    {"companyId":2,"companyName":"公司二","name":"赵冬"},
    {"companyId":3,"companyName":"公司三","name":"刘季"}                
]

现在想按照公司来处理,把相同id的公司中的人员放在一个数组中,最后的结果是,有多少个公司,就返回多少个数组。

可以这样操作:

var list=[
    {"companyId":1,"companyName":"公司一","name":"张春"},
    {"companyId":1,"companyName":"公司一","name":"王夏"},
    {"companyId":2,"companyName":"公司二","name":"李秋"},
    {"companyId":2,"companyName":"公司二","name":"赵冬"},
    {"companyId":3,"companyName":"公司三","name":"刘季"}                
]            

var listNew = [];

list.forEach(function(el){
    for(var i=0;i<listNew.length;i++){
        if(listNew[i].companyId == el.companyId){
            listNew[i].people.push({
                name: el.name
            });
            return;
        }
    }                    
    listNew.push({
        companyId: el.companyId,
        companyName: el.companyName,
        people: [{
            name: el.name                    
        }]
    });    
});
                        
console.log(listNew);

结果为:

这样的结果符合要求。

原文地址:https://www.cnblogs.com/hzhjxx/p/12851155.html