javascript - 计算日期的出现次数
问题描述
我有一个包含日期的对象数组。我想计算一个日期在一个月内出现的次数。例如,如果有像 2019-01-14、2019-01-15、2019-01-16 这样的日期,那么 1 月的计数应该是 3。我想每个月都这样做,但不太确定如何在没有的情况下处理它使代码太迟钝。
var jan = 0;
this.btcDebts.map((item) => {
let date = new Date(item.date);
if (date.toString().includes('Jan')){
jan++;
}
})
console.log(jan);
这行得通,但在另外 11 个月里,它只会变得重复。有没有更简单的方法?
解决方案
无需将这些字符串字段转换为日期,只需按前 7 个字符分组:
let countBy = (a, fn) => a.map(fn).reduce(
(m, k) => m.set(k, 1 + (m.get(k) || 0)),
new Map);
//
items = [
{date: '2019-01-14'},
{date: '2019-02-14'},
{date: '2019-03-14'},
{date: '2019-01-14'},
{date: '2019-02-14'},
{date: '2019-03-14'},
{date: '2019-04-14'},
{date: '2019-05-14'},
{date: '2019-01-14'},
{date: '2019-03-14'},
]
counts = countBy(items, item => item.date.slice(0, 7));
for (let [mon, cnt] of counts)
console.log(mon, cnt)
推荐阅读
- python - 如何将 ArrayField 定义为 django 表单
- go - 如何理解以下代码中的“ch=ch1”?
- c# - 如果至少检查了一个子节点,则检查父节点
- hugo - 如何使用 Hugo 创建三步嵌套?
- woocommerce - Noindex特定类别分页页面
- cakephp - CakePHP 3.x - 文件上传导致令牌不匹配
- javascript - 自定义元素类型在脚本类型 = 模块中加载时报告 HTMLElement?
- swift - 如何在当前应用程序之外获取接触点
- excel - VBA - 如何将 IEnumerable(Object) 转换为字符串
- css - ionic-4 离子选择选项上的文本换行