javascript - 按周 javascript 分组日期

标签 javascript arrays date group-by

我有波斯日期数组,我想按周对日期进行分组。
例如,我有以下数组:

[
    "1396-10-11 09:07:21",
    "1396-10-10 10:03:51",
    "1396-10-07 02:07:02",
    "1396-11-27 08:02:45",
    "1396-11-19 01:02:32",
    "1396-12-01 22:13:21",
    "1396-02-12 09:07:21",
    "1396-05-18 04:02:29",
    "1396-05-21 14:01:42",
    "1396-07-11 01:16:29"
]

我想按周分组日期。

我写了以下代码,但效果不佳:
Array.prototype.groupBy = function(prop) {
  return this.reduce(function(groups, item) {
    var val = item[prop];
    groups[val] = groups[val] || [];
    groups[val].push(item);
    return groups;
  }, {});
}

const formatted = dates.map(elem => {
  return { 
    numberOfWeek: moment(elem.date, 'jYYYY-jMM-jDD').startOf('jMonth').jWeek(),
    date: moment(elem.date, 'jYYYY-jMM-jDD').format('jYYYY-jMM-jDD'), 
    score: elem.score 
  };
});

最佳答案

您可以使用moment().week()要获取一年中的周数,然后按它进行分组,这是一个工作示例,我使用了 array.reduce创建一个按周数分组的新日期对象:

const dates = [
  "1396-10-11 09:07:21",
  "1396-10-10 10:03:51",
  "1396-10-07 02:07:02",
  "1396-11-27 08:02:45",
  "1396-11-19 01:02:32",
  "1396-12-01 22:13:21",
  "1396-02-12 09:07:21",
  "1396-05-18 04:02:29",
  "1396-05-21 14:01:42",
  "1396-07-11 01:16:29"
];

const groups = dates.reduce((acc, date) => {

  // create a composed key: 'year-week' 
  const yearWeek = `${moment(date).year()}-${moment(date).week()}`;
  
  // add this key as a property to the result object
  if (!acc[yearWeek]) {
    acc[yearWeek] = [];
  }
  
  // push the current date that belongs to the year-week calculated befor
  acc[yearWeek].push(date);

  return acc;

}, {});

console.log(groups);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

关于javascript - 按周 javascript 分组日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48083728/

相关文章:

javascript - 如何在java中读取用户证书

JavaScript:调用存储在变量中的函数时访问 'this'

在第一个结果处停止的 JavaScript 过滤器

Javascript 对象与数组性能

javascript - AngularJS 点击指令的 Google Chrome 内容保护政策

Java返回原始数组的数组地址

c++ - 有没有一种方法可以排除C++数组中的行和列?

java - 设置日期和时间格式

c++ - 使用 Howard Hinnant 日期库解析亚秒日期

java - 将iso8601字符串日期时间格式转换为Java中的日期