我有波斯日期数组,我想按周对日期进行分组。
例如,我有以下数组:
[
"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/