Javascript 使用lodash进行分组

Javascript 使用lodash进行分组,javascript,lodash,Javascript,Lodash,我有一个对象数组,如下所示: var data = [ { "count": 1, "make": "ALFA ROMEO", "model": "GIULIETTA DIESEL - 2010" }, { "count": 2, "make": "AUDI", "model": "A1 DIESEL" }, { "count": 1, "make": "AUDI", "model": "

我有一个对象数组,如下所示:

var data = [
  {
    "count": 1, 
    "make": "ALFA ROMEO", 
    "model": "GIULIETTA DIESEL - 2010"
  }, 
  {
    "count": 2, 
    "make": "AUDI", 
    "model": "A1 DIESEL"
  }, 
  {
    "count": 1, 
    "make": "AUDI", 
    "model": "A1 SPORTBACK DIESEL"
  }, 
  {
    "count": 2, 
    "make": "AUDI", 
    "model": "A3 DIESEL - 2012"
  }, 
  {
    "count": 3, 
    "make": "Volkswagen", 
    "model": "Golf"
  }, 
  {
    "count": 3, 
    "make": "Ford", 
    "model": "Escord"
  }, 
  {
    "count": 2, 
    "make": "Opel", 
    "model": "Zafira"
  }
]
我想按
分组,按
make
进行分组,然后得到三个计数最高的make,其余的我将显示为其他

例如,我想得到:

var result = [
    {
       "brand": "Audi",
       "count": 5
     },
     {
       "brand": "Volkswagen",
       "count": 3
     },
     {
       "brand": "Ford",
       "count": 3
     },
     {
       "brand": "Other",
       "count": 3
     }
]

我不知道如何开始。有什么帮助吗?

使用lodash

启动一个lodash链。由make使用,然后是结果和
count
属性。使用转换回数组,使用降序排序,并使用
..value()
完成链。将结果分成2个数组,并使用reduce对第2个数组(低集计数)求和:

var数据=[{“计数”:1,“制造”:“阿尔法罗密欧”,“模型”:“朱利埃塔柴油机-2010”},{“计数”:2,“制造”:“奥迪”,“模型”:“A1柴油机”},{“计数”:1,“制造”:“奥迪”,“模型”:“A1 SPORTBACK柴油机”},{“计数”:2,“制造”:“奥迪”,“模型”:“A3柴油机-2012”},{“计数”:3,“制造”:“大众”,“模型”:“高尔夫”},{“计数”:3,“制造”:“福特”,“模型”:“埃斯科德”},{“计数”:2,“制造”:“欧宝”、“车型”:“Zafira”}];
var计数=(数据)
.groupBy('make')
.map(函数(g,键){return{
make:键,
计数:u.sumBy(g,'count')
};})
.values()
.orderBy('count','desc')
.value();
var result=counts.slice(0,3).concat({
品牌:“其他”,
count:counts.slice(3).reduce(函数(s,{count}){返回s+count;},0)
})
console.log(结果);

使用lodash

启动lodash链。由make使用,然后是结果和
计数
属性。使用转换回数组,使用降序排序,并使用
.value()
完成链。将结果分成两个数组,并使用reduce:

var数据=[{“计数”:1,“制造”:“阿尔法罗密欧”,“模型”:“朱利埃塔柴油机-2010”},{“计数”:2,“制造”:“奥迪”,“模型”:“A1柴油机”},{“计数”:1,“制造”:“奥迪”,“模型”:“A1 SPORTBACK柴油机”},{“计数”:2,“制造”:“奥迪”,“模型”:“A3柴油机-2012”},{“计数”:3,“制造”:“大众”,“模型”:“高尔夫”},{“计数”:3,“制造”:“福特”,“模型”:“埃斯科德”},{“计数”:2,“制造”:欧宝,“车型”:“Zafira”}];
var计数=(数据)
.groupBy('make')
.map(函数(g,键){return{
make:键,
计数:u.sumBy(g,'count')
};})
.values()
.orderBy('count','desc')
.value();
var result=counts.slice(0,3).concat({
品牌:“其他”,
count:counts.slice(3).reduce(函数(s,{count}){返回s+count;},0)
})
console.log(结果);

使用纯Javascript,您可以获取一个哈希表来收集相同的
make
并对结果数组进行排序。稍后添加结果集末尾的所有计数,直到数组获得所需的长度

var数据=[{count:1,make:“阿尔法罗密欧”,model:“朱利埃塔柴油机-2010”},{count:2,make:“奥迪”,model:“A1柴油机”},{count:1,make:“奥迪”,model:“A3柴油机-2012”},{count:3,make:“大众”,model:“高尔夫”},{count 3,make:“福特”,model:“埃斯考德”},{计数:2,制造:“欧宝”,型号:“扎菲拉”},
hash=Object.create(null),
结果=[];
data.forEach(功能(汽车){
如果(!散列[car.make]){
hash[car.make]={make:car.make,计数:0};
结果推送(散列[car.make]);
}
散列[car.make].count+=car.count;
});
结果.排序(函数(a,b){
返回b.count-a.count;
});
while(result.length>4){
push({make:'Other',count:result.pop().count+result.pop().count});
}
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
使用纯Javascript,您可以使用哈希表收集相同的
make
并对结果数组进行排序。稍后添加结果集末尾的所有计数,直到数组获得所需的长度

var数据=[{count:1,make:“阿尔法罗密欧”,model:“朱利埃塔柴油机-2010”},{count:2,make:“奥迪”,model:“A1柴油机”},{count:1,make:“奥迪”,model:“A3柴油机-2012”},{count:3,make:“大众”,model:“高尔夫”},{count 3,make:“福特”,model:“埃斯考德”},{计数:2,制造:“欧宝”,型号:“扎菲拉”},
hash=Object.create(null),
结果=[];
data.forEach(功能(汽车){
如果(!散列[car.make]){
hash[car.make]={make:car.make,计数:0};
结果推送(散列[car.make]);
}
散列[car.make].count+=car.count;
});
结果.排序(函数(a,b){
返回b.count-a.count;
});
while(result.length>4){
push({make:'Other',count:result.pop().count+result.pop().count});
}
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
您可以通过lodash和


你可以通过混合使用lodash和

“我不知道如何开始”-你确定吗?可能重复一些好的开始的地方:和重复的“我不知道如何开始”-你确定吗?可能重复一些好的开始的地方:和重复的
var result = _.chain(data)
        .groupBy("make")
        .map( (element, id) => ({
            make: id,
            count: _.sumBy(element, 'count'),
        }))
        .value();

console.log(result);

[
  {
    "make": "ALFA ROMEO",
    "count": 1
  },
  {
    "make": "AUDI",
    "count": 5
  },
  {
    "make": "Volkswagen",
    "count": 3
  },
  {
    "make": "Ford",
    "count": 3
  },
  {
    "make": "Opel",
    "count": 2
  }
]