Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用moment和lodash按对象字段分组并按日期计数?_Javascript_Json_Momentjs_Lodash - Fatal编程技术网

Javascript 如何使用moment和lodash按对象字段分组并按日期计数?

Javascript 如何使用moment和lodash按对象字段分组并按日期计数?,javascript,json,momentjs,lodash,Javascript,Json,Momentjs,Lodash,我有一个相当复杂的情况,我不知道如何转换使用lodash和矩。假设我有一个日期范围和这个初始数据 var startDate = "2018-02-21" var endDate = "2018-02-23" var data = [ { "date": "2018-02-21 21:21:17", "group": "A" }, { "date": "2018-02-21 21:21:17", "gr

我有一个相当复杂的情况,我不知道如何转换使用lodash和矩。假设我有一个日期范围和这个初始数据

var startDate = "2018-02-21"
var endDate = "2018-02-23"
var data = [
      {
       "date": "2018-02-21 21:21:17",
       "group": "A"
       },
      {
       "date": "2018-02-21 21:21:17",
       "group": "B"
       },
      {
       "date": "2018-02-23 21:21:17",
       "group": "A"
       },
      {
       "date": "2018-02-21 21:21:17",
       "group": "B"
       }
  ];
我想使用lodash对所有“group”字段进行分组,并在新对象中添加一个名为“dates”的新字段,该字段将是日期的键/值对。键将是日期范围(从startDate到endDate),值将是匹配日期的计数

新输出如下所示:

 var output = [
    {
        "group": "A",
        "dates": [
            "2018-02-21": 1,
            "2018-02-22": 0
            "2018-02-23": 1
        ]
    },
    {
        "group": "B",
        "dates": [
            "2018-02-21": 2,
            "2018-02-22": 0,
            "2018-02-23": 0
        ]
    }
  ];
我创建了一个JSFIDLE,并导入了这种情况的瞬间和细节


如果你能帮忙,非常感谢

您可以用纯javascript解决这个问题

首先在开始日期和结束日期之间创建一个日期数组。如果
数据中缺少天数,我们将在以后使用此数组

var dates = [];
var startDate = new Date("2018-02-21");
var endDate = new Date("2018-02-23");
for (var s = startDate; s <= endDate; s.setDate(s.getDate() + 1)) {
    dates.push(s.toISOString().split('T')[0]);
}
输出为:

{
  "0": {
    "date": {
      "2018-02-21": 1,
      "2018-02-22": 0,
      "2018-02-23": 1
    },
    "group": "A"
  },
  "1": {
    "date": {
      "2018-02-21": 2,
      "2018-02-22": 0,
      "2018-02-23": 0
    },
    "group": "B"
  }
}
将上述代码复制到web控制台中,并查看控制台的结果。表格(输出)


我还修改了你的

哇,非常感谢你一步一步地给我看!我真的很感激:)
{
  "0": {
    "date": {
      "2018-02-21": 1,
      "2018-02-22": 0,
      "2018-02-23": 1
    },
    "group": "A"
  },
  "1": {
    "date": {
      "2018-02-21": 2,
      "2018-02-22": 0,
      "2018-02-23": 0
    },
    "group": "B"
  }
}