javascript - 如何按日期计算对象数组中的出现次数

标签 javascript arrays json date find-occurrences

我正在 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/

相关文章:

javascript - 无法使用 Canvas 在特定 Angular 上围绕圆圈旋转箭头

javascript - 如何使用 jQuery 在 ASP.NET MVC 中上传文件?

java - 将字符数组列表转换为字符串的最佳方法

javascript - 多个数组元素的组合

arrays - PostgreSQL 对多行的 jsonb 数组中的结果进行计数

javascript - 需要带有自定义轴位置的多面可视化

javascript - 如何在WSO2 ESB中创建全局变量-必须是可更新的

javascript - 尾随逗号会破坏 JSON 吗?

javascript - 如何让复选框根据模型进行初始化?

javascript - 在固定 block 中按比例调整图像大小