编程语言
首页 > 编程语言> > javascript – 如何使用Nunjucks或Node.JS对JSON数据进行分组并按月计算

javascript – 如何使用Nunjucks或Node.JS对JSON数据进行分组并按月计算

作者:互联网

以这些数据为例,这只是2条记录,几个月就有数百条记录

{
 "responses": [{
    "responseid": 1,
    "q1": 1,
    "q2": 1,
    "q3": 1,
    "q4": 1,
    "q5": 2,
    "response": "Response 1 example feedback",
    "date": "2018-02-12T00:00:00"
  },
  {
    "responseid": 2,
    "q1": 1,
    "q2": 2,
    "q3": 1,
    "q4": 1,
    "q5": 1,
    "response": "Response 2 example feedback",
    "date": "2018-03-15T00:00:00"
  },
  {
    "responseid": 3,
    "q1": 1,
    "q2": 2,
    "q3": 1,
    "q4": 1,
    "q5": 1,
    "response": "Response 3 example feedback",
    "date": "2018-04-15T00:00:00"
  },
  {
    "responseid": 4,
    "q1": 1,
    "q2": 2,
    "q3": 1,
    "q4": 1,
    "q5": 1,
    "response": "Response 4 example feedback",
    "date": "2018-04-15T00:00:00"
  }]
}

如何按月份部分对数据进行分组,以便我可以显示任何给定月份的记录数.所以上面的4个回复,2个来自4月,1个来自2月和3月

2月1日

3月1日

4月2日

我正在使用Node和Nunjucks.

我想补充一点,我可以将日期分组作为起点.

{% for date, items in servicedata.responses | groupby("date") %}
    <b>{{ date }}</b> :
    {{items.length}}<br>
{% endfor %}

解决方法:

简单计数:

const moment = require('moment');

let res = {};    

data.responses.forEach(item => {
    let month = moment(item.date).startOf('month');
    res[month] = res[month] || 0;
    res[month]++;
});

console.log(res);
/* 'Thu Feb 01 2018 00:00:00 GMT+0300': 1,
   'Thu Mar 01 2018 00:00:00 GMT+0300': 1,
   'Sun Apr 01 2018 00:00:00 GMT+0300': 2 */

分组:

const moment = require('moment');

let res = {};  

data.responses.forEach(item => {
    let month = moment(item.date).startOf('month');
    res[month] = res[month] || { count: 0, responses: [] };
    res[month].count++;
    res[month].responses.push(item);
});

console.log(res)

标签:javascript,node-js,nunjucks
来源: https://codeday.me/bug/20190710/1424940.html