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 - 如何在javascript中实现精确的全屏?

java - ArrayList 返回零?

python - 查找数组列表的最小值和最大值

Python设置不存在的数组的值默认为0

javascript - 从第三方API获取固定数量的JSON对象

JavaScript/jQuery 输入[type=text] 模式

javascript - 使用 jQuery,你能有两个使用 $(document).ready(function() 的外部脚本吗?

JavaScript - 当我更改链接的 href 时未定义链接

json - 通过消除空格来压缩 JSON 文件

java - 反序列化 JSON 对象时如何忽略特定属性?