我正在处理具有多个属性的对象的大型数据集(见下文)并尝试计算每个"类型"的实例数量。属性。困难的部分是存在大量不同类型,因此我无法从预定义列表开始。
因此,以下数据的理想输出是:
"Medic Response" : 2
"Aid Response" : 1
提前致谢。
对象
address: "9001 Lake City Way Ne"
datetime : "2011-02-12T18:04:00.000"
incident_number : "F110013072"
latitude :"47.693931"
longitude : "-122.30552"
type : "Medic Response"
对象
address : "97 S Main St"
datetime : "2011-02-16T18:46:00.000"
incident_number : "F110014403"
latitude : "47.600044"
longitude : "-122.334219"
type : "Aid Response"
对象
address : "509 3rd Av"
datetime : "2011-02-12T07:30:00.000"
incident_number : "F110012897"
latitude : "47.602114"
longitude : "-122.330809"
report_location :
type : "Medic Response"
答案 0 :(得分:2)
您可以使用名称/计数类型的键/值哈希,然后迭代您的对象集合,随时递增每个计数。例如:
var counts = {};
var objects = [/*array of your objects*/];
objects.forEach(function (o) {
// add the type to the hash if it is missing;
// set initial count to 0
if (!counts.hasOwnProperty(o.type)) {
counts[o.type] = 0;
}
// increment the count based on the type
counts[o.type] += 1;
});
console.log(counts);
答案 1 :(得分:1)
您可以使用array.reduce
将数据数组缩减为对象图。
假设它是一个扁平的对象数组,而不是嵌套的东西。
var count = data.reduce(function(prev, cur) {
if (prev.hasOwnProperty(cur.type))
prev[cur.type] += 1;
else
prev[cur.type] = 1;
return prev;
}, {});
答案 2 :(得分:0)
您也可以使用reduce
:
objs.reduce(function(c, d){
if (!c[d.type]) c[d.type] = 0;
c[d.type]++;
return c;
}, {});
答案 3 :(得分:0)
为了确保我理解你的问题,让我们考虑以下效率低下的直接实现:
var data = [{address:"9001 Lake...", ..., type:"Medic Response"},
{address:"...", ..., type:"Aid Response",
...,
{address""...", ..., type:"Medic Response"}];
var i, j, b, result = [] ;
for(i = 0; i < data.length; i ++)
{
b = false ;
for(j = 0; j < result.length; j++)
if(result[j].key == data.type) {
result[j].count += 1 ;
b = true ;
break ;
}
if (!b) {
result.push({key:data.type, count: 1});
}
}
// result is the frequency array of the "type" values in data array