使用reduceRight返回有条件的工作日

时间:2016-08-22 05:23:47

标签: javascript arrays mongodb lodash

我想从我的mongodb获取特定的一周(例如星期六)收集日。这是示例数据库集合

var array2 = [
{
"_id": "1",
"start": "2016-08-23T16:00:00.000Z",
},
{
"_id": "2",
"start": "2016-08-26T21:00:00.000Z",
},
{
"_id": "3",
"start": "2016-08-23T16:10:00.000Z",
}];

javascript week reference 得到星期六的条目,我运行一个地图,这是代码

array2.map(function(object){ 
 var newObject = {};
 var nedatee = new Date(object.start);
 var weekday = nedatee.getDay();
 if (weekday===6) {
     newObject['start'] = true;
 }
 return newObject;
});

输出

  

[{},{'start':true},{}]

我不想要我的数组中的空对象,我不想手动删除它,有什么聪明的方法吗?我怎样才能充分利用reduceRight? 我想要的只是

  

[{ '启动':真}]

如果您需要

javascript map参考

3 个答案:

答案 0 :(得分:2)

您是否考虑过使用javascript?那么您的代码将是

var hasSaturdays = array2.some(function isSaturday(object){ 
 var nedatee = new Date(object.start);
 return nedatee.getDay() === 6;
});

然后,如果hasSaturdays为true,那么您可以返回[{'start':true}]

请注意,它只是IE 9 +

答案 1 :(得分:2)

您可以使用 reduceRight 并拼接失败:

var array2 = [
{
"_id": "1",
"start": "2016-08-23T16:00:00.000Z",
},
{
"_id": "2",
"start": "2016-08-26T21:00:00.000Z",
},
{
"_id": "3",
"start": "2016-08-23T16:10:00.000Z",
}];

array2.reduceRight(function(acc,v,i) {
  if (new Date(v.start).getUTCDay() != 6){
    array2.splice(i,1);
  }
},null)

console.log(array2);

请注意,日期将被解析为UTC,因此2016-08-26T21:00:00.000Z将在星期六的UTC + 0300或更高的任何时区,因此使用 getUTCDay (即格林尼治标准时间区的星期六都不是。)

此外,您不应该真正依赖于使用Date构造函数解析任何日期字符串。您应该使用解析器并提供格式,请参阅Chrome can't parse date but IE can

答案 2 :(得分:2)

是否使用UTC时区这是一项简单的过滤工作,只有Array.prototype.filter()这项工作。

var array2 = [
{
"_id": "1",
"start": "2016-08-23T16:00:00.000Z",
},
{
"_id": "2",
"start": "2016-08-26T21:00:00.000Z",
},
{
"_id": "3",
"start": "2016-08-23T16:10:00.000Z",
}],
saturdays = array2.filter(date => (new Date(date.start)).getDay() === 6)
                  .map(date => ({start:true}));
console.log(saturdays);