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
}
]