使用javascript/lodash对特定键的相同值进行分组、计数并将结果返回到数组
我有一个对象集合,我使用lodash的uz.map函数从中获取特定键的所有对应值:使用javascript/lodash对特定键的相同值进行分组、计数并将结果返回到数组,javascript,arrays,object,iterator,lodash,Javascript,Arrays,Object,Iterator,Lodash,我有一个对象集合,我使用lodash的uz.map函数从中获取特定键的所有对应值: [{ "id": 1, "alarm_type": "danger", "data": "Dapibus ac facilisis in facilisilitumas el perfertum" }, { "id": 2, "alarm_type": "danger", "data": "Cras sit amet nibh libero" }, { "i
[{
"id": 1,
"alarm_type": "danger",
"data": "Dapibus ac facilisis in facilisilitumas el perfertum"
}, {
"id": 2,
"alarm_type": "danger",
"data": "Cras sit amet nibh libero"
}, {
"id": 3,
"alarm_type": "warning",
"data": "Porta ac consectetur ac"
}, {
"id": 4,
"alarm_type": "info",
"data": "Vestibulum at eros porta ac consectetur ac"
}, {
"id": 5,
"alarm_type": "success",
"data": "Morbi leo risus"
}, {
"id": 6,
"alarm_type": "default",
"data": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
}, {
"id": 7,
"alarm_type": "danger",
"data": "Cras sit amet nibh libero"
}, {
}, {
"id": 8,
"alarm_type": "default",
"data": "Dolor sit amet, consectetur adipiscing."
}, {
"id": 9,
"alarm_type": "default",
"data": "Dolor sit amet, consectetur adipiscing elit."
}]
javascript函数:
var alarmsQueue = alarms.getAlarms();
alarmsQueue.then(function(result) {
var alarmsTypes = _.map(result, 'alarm_type');
console.log(alarmsTypes);
});
结果是以下数组:
["danger", "danger", "warning", "info", "success", "default", "danger", "default", "default"]
我想从上一篇文章中获得以下对象:
{"danger": 3, "warning": 1, "info": 1, "success": 1, "default": 3}
最好的方法是什么?看看JSFIDLE
JavaScript
var alarmTypes = ["danger", "danger", "warning", "info", "success", "default", "danger", "default", "default"];
var alarmTypeCount = {};
for(var i = 0; i < alarmTypes.length; i++){
var alarmType = alarmTypes[i];
if(alarmTypeCount[alarmType]) {
alarmTypeCount[alarmType]++;
} else {
alarmTypeCount[alarmType] = 1;
}
}
console.log(JSON.stringify(alarmTypeCount)); // {"danger":3,"warning":1,"info":1,"success":1,"default":3}
var alarmTypes=[“危险”、“危险”、“警告”、“信息”、“成功”、“默认”、“危险”、“默认”、“默认”];
var alarmTypeCount={};
对于(变量i=0;i
这是一个单行程序
您不能有[“危险”:3,“警告”:1,“信息”:1,“成功”:1,“默认”:3]
但您可以将对象中的键值分组,并具有:
[{"danger": 3}, {"warning": 1}, ....]
或者使用键值对创建唯一的对象,如:
{"danger": 3, "warning": 1, ....}
下面是使用reduce方法解决第二种情况的方法:
var alarmsTypes = _.reduce(result, function (ac,v) {
if ( ac[v.alarm_type] ) {
ac[v.alarm_type] ++;
}else{
ac[v.alarm_type] = 1;
};
return ac
},{});
你是说
{“危险”:3,…}
?@Arg0n更正,谢谢。;-)顺便说一句,这有助于更好地理解过程,而不是公认的答案。
var alarmsTypes = _.reduce(result, function (ac,v) {
if ( ac[v.alarm_type] ) {
ac[v.alarm_type] ++;
}else{
ac[v.alarm_type] = 1;
};
return ac
},{});