我有一个数组,在这个数组中将保存一个JavaScript对象。
var items = [];
var item = {
id: data.id,
kategorie: data.kategorie,
name: data.name
}
items.push(item); // that will be done few times
现在我有这样的项目
items[0] = id: 1, kategorie: "scheduled", name: "Test1"
items[1] = id: 2, kategorie: "queued", name: "Test2"
items[2] = id: 3, kategorie: "recorded", name: "Test3"
items[3] = id: 4, kategorie: "recorded", name: "Test4"
items[4] = id: 5, kategorie: "recorded", name: "Test5"
我想数一下这个数组。至少最后一个数组应该是这样的。
arrayFinal[0] = kategorie: "scheduled", counted: 1
arrayFinal[1] = kategorie: "recorded", counted: 3
我是怎么做到的?
答案 0 :(得分:2)
这不会产生您的确切输出,但它会让您知道该怎么做:
var items = [],
arrayFinal = [];
items[0] = {
id: 1,
kategorie: "scheduled",
name: "Test1"
};
items[1] = {
id: 2,
kategorie: "queued",
name: "Test2"
};
items[2] = {
id: 3,
kategorie: "recorded",
name: "Test3"
};
items[3] = {
id: 4,
kategorie: "recorded",
name: "Test4"
};
items[4] = {
id: 5,
kategorie: "recorded",
name: "Test5"
};
items.forEach(function (v, i) {
if (typeof arrayFinal[v.kategorie] === 'undefined') {
arrayFinal[v.kategorie] = 1;
} else {
arrayFinal[v.kategorie] += 1;
}
});
答案 1 :(得分:1)
如果您熟悉linq,可以编写查询。按kategorie分组,计算ID。
例如:
var queryResult = Enumerable.From(items)
.GroupBy("$.kategorie", "", 'key,e=>key+":"+e.Count()', "").ToJSON();
答案 2 :(得分:1)
var items = [
{ id: 1, kategorie: "scheduled", name: "Test1" },
{ id: 2, kategorie: "queued", name: "Test2" },
{ id: 3, kategorie: "recorded", name: "Test3" },
{ id: 4, kategorie: "recorded", name: "Test4" },
{ id: 5, kategorie: "recorded", name: "Test5" }
];
var index,
arrayFinal = [];
arrayFinal.contains = function(kategorie) {
for(var i = 0, len = arrayFinal.length; i < len; i++) {
if(arrayFinal[i].kategorie === kategorie) {
return i;
}
}
return false;
};
for(var i = 0, len = items.length; i < len; i++) {
if( index = arrayFinal.contains(items[i].kategorie)) {
arrayFinal[index].counted++;
} else {
arrayFinal.push({ kategorie: items[i].kategorie, counted: 1 });
}
}
答案 3 :(得分:1)
查看underscore.js的_.countBy
例程:
counts = _.countBy(items, "kategorie");
这将创建一个如下所示的对象:
{
recorded : 3,
...
}
要将其转换为数组格式,您需要_.map
:
arrayFinal = _.map(counts, function(v,k){
return {kategorie: k, counted: v};
});
在那里,你已经完成了。
答案 4 :(得分:0)
如果你想了一下并进行实验,你就会这样做。
kategorieCount
。items
。如果有kategorieCount[items[i].name]
递增,如果没有 - 在i
创建元素然后递增值。arrayFinal
。kategorieCount
。将密钥放在arrayFinal[i].kategorie
中,将值放在arrayFinal[i].counted
。