首页 > 解决方案 > 从日期数组生成json对象,每个日期都出现

问题描述

您好,我有一个日期列表,存储在一个数组中;同一日期有多个条目。我想在 json 对象的 for 中获取每个日期的出现,例如:

预期输出: dates:[{date:11/10/2019,count: 5},{date: 11/11/2019,count:4},{date:11/12/2019, count: 5 }]

我的数组数据如下所示:

[
  "11/10/2019, 10:44:16 PM",
  "11/10/2019, 10:48:26 AM",
  "11/10/2019, 10:59:41 PM",
  "11/10/2019, 11:37:53 AM",
  "11/10/2019, 12:19:52 PM",
  "11/11/2019, 12:46:59 PM",
  "11/11/2019, 12:59:08 PM",
  "11/11/2019, 1:32:23 PM",
  "11/11/2019, 3:08:01 AM",
  "11/12/2019, 3:21:39 AM",
  "11/12/2019, 3:26:00 PM",
  "11/12/2019, 3:27:13 PM",
  "11/12/2019, 4:43:24 AM",
  "11/12/2019, 4:49:39 PM"
]

我喜欢只考虑 json 中的日期。

我试过代码:

var cur;
var cnt = 0;
for (var i = 0; i < array_dates.length; i++) {
    cur = current.getDate();
    var d = new Date(array_dates[i]);
    var n = d.getDate();
    if (n != cur) {
        if (cnt > 0) {
            newdata[current] = cnt;
        }
        current = new Date(array_dates[i]);
        cnt = 1;
    } else {
        cnt++;
    }
}
newdata = JSON.stringify(newdata);

但我没有以预期的方式得到一个对象。我遗漏了一些东西,但不知道如何解决。我怎样才能用数组达到预期的结果?

标签: javascriptjson

解决方案


您可以使用String.split获取字符串的日期部分(在逗号左侧),然后将每个值计数到一个对象中,然后处理计数以生成所需形式的输出:

const array_dates = [
  "11/10/2019, 10:44:16 PM",
  "11/10/2019, 10:48:26 AM",
  "11/10/2019, 10:59:41 PM",
  "11/10/2019, 11:37:53 AM",
  "11/10/2019, 12:19:52 PM",
  "11/11/2019, 12:46:59 PM",
  "11/11/2019, 12:59:08 PM",
  "11/11/2019, 1:32:23 PM",
  "11/11/2019, 3:08:01 AM",
  "11/12/2019, 3:21:39 AM",
  "11/12/2019, 3:26:00 PM",
  "11/12/2019, 3:27:13 PM",
  "11/12/2019, 4:43:24 AM",
  "11/12/2019, 4:49:39 PM"
];


let counts = array_dates.reduce((c, v) => {
  let d = v.split(',')[0];
  c[d] = (c[d] || 0) + 1;
  return c;
}, {});
let data = {
  dates: []
};
for (date in counts) {
  data.dates.push({
    date: date,
    count: counts[date]
  });
}
console.log(data);


推荐阅读