我正在 TypeScript 或 JavaScript 中搜索一个强大的解决方案来计算对象数组中的出现次数。我想在日期之前做到这一点。 (我需要它来创建一些图表)
例如,我有这个数组:
var arr = [
{date: Wed Jan 20 2016
type: "Apples"},
{date: Mon Feb 29 2016
type: "Peaches"},
{date: Thu Mar 31 2016
type: "Apples"},
{date: Fri Apr 22 2016
type: "Apples"},
{date: Fri Apr 22 2016
type: "Apples"},
{date: Fri Apr 22 2016
type: "Apples"},
{date: Fri Apr 22 2016
type: "Strawberries"}
]
我想要的结果是下一个:
var arr2 = [
{date: Wed Jan 20 2016
type: ["Apples", 1]},
{date: Mon Feb 29 2016
type: ["Peaches",1]},
{date: Thu Mar 31 2016
type: ["Apples",1]},
{date: Fri Apr 22 2016
type: ["Apples",3],["Strawberries",1]}
]
我不知道为什么,但我找不到好的解决方案,我这几天正在努力......
如果有人知道技巧、函数或其他东西吗?
最佳答案
试试这个
首先创建 map
var map = {}; arr.forEach(function(val){
map[val.date] = map[val.date] || {};
map[val.date][val.type] = map[val.date][val.type] || 0;
map[val.date][val.type]++;
});
现在获取输出
var output = Object.keys(map).map(function(key){
var tmpArr = [];
for(var type in map[key])
{
tmpArr.push( [ type, map[key][type] ] )
}
return { date : key, type: tmpArr };
})
演示
var arr = [
{date: "Wed Jan 20 2016",
type: "Apples"},
{date: "Mon Feb 29 2016",
type: "Peaches"},
{date: "Thu Mar 31 2016",
type: "Apples"},
{date: "Fri Apr 22 2016" ,
type: "Apples"},
{date: "Fri Apr 22 2016" ,
type: "Apples"},
{date: "Fri Apr 22 2016" ,
type: "Apples"},
{date: "Fri Apr 22 2016" ,
type: "Strawberries"}
]
var map = {}; arr.forEach(function(val){
map[val.date] = map[val.date] || {};
map[val.date][val.type] = map[val.date][val.type] || 0;
map[val.date][val.type]++;
});
var output = Object.keys(map).map(function(key){
var tmpArr = [];
for(var type in map[key])
{
tmpArr.push( [ type, map[key][type] ] )
}
return { date : key, type: tmpArr };
})
document.body.innerHTML += JSON.stringify(output,0,4);
关于javascript - 如何按日期计算对象数组中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839912/