Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按周分组日期_Javascript_Arrays_Date_Group By - Fatal编程技术网

Javascript 按周分组日期

Javascript 按周分组日期,javascript,arrays,date,group-by,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-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 
  };
});
您可以使用获取一年中的周数,然后按周数分组,下面是一个工作示例,我用于创建一个按周数分组的日期的新对象:

const日期=[
"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"
];
常量组=日期。减少((acc,日期)=>{
//创建一个组合键:“年-周”
const yearWeek=`${moment(date.year()}-${moment(date.week()}`;
//将此键作为属性添加到结果对象
如果(!acc[年周]){
acc[年度周]=[];
}
//推送属于之前计算的年周的当前日期
acc【年周】。推送(日期);
返回acc;
}, {});
控制台日志(组)

用Lodash实现同样效果的另一种简单方法如下:

const groupBy=require('lodash/groupBy');
恒力矩=要求的(‘力矩’);
常数数据=[
"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"
];
分组方式(数据(dt)=>时刻(dt.week());
结果如下:

{
'7': [ '1396-02-12 09:07:21' ],
'21': [ '1396-05-18 04:02:29', '1396-05-21 14:01:42' ],
'29': [ '1396-07-11 01:16:29' ],
'41': [ '1396-10-07 02:07:02' ],
'42': [ '1396-10-11 09:07:21', '1396-10-10 10:03:51' ],
'47': [ '1396-11-19 01:02:32' ],
'49': [ '1396-11-27 08:02:45', '1396-12-01 22:13:21' ] 
}

您能告诉我们到目前为止您都做了哪些尝试吗?对于该数组,所需的输出是什么?您应该从解析日期开始。一旦你展示了你可以做到这一点,这里有一个相当长的线程来确定一天所在的一年中的一周:对于分组方式,你可能可以使用一个以周数为键的对象。这些只是我如何做的想法。就像@chris said,请告诉我们你已经尝试了什么,我们可以继续。@chris我的代码补充说这里有一个答案,可以得到任何日期的年和周数:。但是,您仍然需要正确地将输入字符串解析为日期。谢谢@YouneL,但是如果我有多年前的日期,会发生什么?!在这种情况下,您必须按周数和年对日期进行分组,使用矩(date).format('YYYY')获得年和包含周数的concatente,然后进行分组,希望此帮助可以向您解释更多有关如何组合周和年的信息?我更新了答案,请查看。如果我的回答对您有用,请将其标记为“接受”是,因为它们属于一年中的同一周(49),这有什么不对?他们有4天的时间差这看起来是个不错的时间。