Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 ES6-获取当天的所有活动对象[差异小于或等于1天]_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6-获取当天的所有活动对象[差异小于或等于1天]

Javascript ES6-获取当天的所有活动对象[差异小于或等于1天],javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个activity对象数组[javascript-es6]。 其中一个属性是ActivityTime,我正在寻找获取所有活动时间为同一天的对象的最佳方法。 即所有活动时差小于或等于1天的对象。如果可能的话,我想使用最新的Es6功能来完成,非常感谢您的帮助 const activities = [ { "ActivityID": 25, "AlertType": 1, "Area": "North", "Ac

我有一个activity对象数组[javascript-es6]。 其中一个属性是ActivityTime,我正在寻找获取所有活动时间为同一天的对象的最佳方法。 即所有活动时差小于或等于1天的对象。如果可能的话,我想使用最新的Es6功能来完成,非常感谢您的帮助

 const activities =    [
      {
        "ActivityID": 25,
        "AlertType": 1,
        "Area": "North",
        "ActivityTime ": "2017-02-01T00:01:01.001Z",
        "MeasureValue": -1
      },
      {
        "ActivityID": 26,
        "AlertType": 1,
        "Area": "West",
        "ActivityTime ": "2016-04-12T15:13:11.733Z",
        "MeasureValue": -1
      },
      {
        "ActivityID": 27,
        "AlertType": 1,
        "Area": "North",
        "ActivityTime ": "2017-02-01T00:02:01.001Z",
        "MeasureValue": 3
      }

    ]
这里我期望ACtivityID为25和27的对象,因为它们属于相同的日期[差异小于或等于24小时]

如何使用Es6功能以最干净的方式实现这一点

我在下面试过……但没用

const datesAreOnSameDay = (first, second) => {
    console.log("First Date: " + new Date(first.ActivityTime ));
    console.log("Second Date: " + new Date(second.ActivityTime ));
    new Date(first.ActivityTime ).getFullYear() === new Date(second.ActivityTime ).getFullYear() &&
        new Date(first.ActivityTime ).getMonth() === new Date(second.ActivityTime ).getMonth() &&
        new Date(first.ActivityTime ).getDate() === new Date(second.ActivityTime ).getDate();
}

const filtered = activities .filter(datesAreOnSameDay);

console.log(filtered);
我尝试使用一个过滤器函数,假设它将每个对象包含两个对象,并将检查它们是否具有相同的日期。但不知何故,它将第二个参数打印为无效日期

今天:

activities.filter((activity) => {
  return (new Date(activity.ActivityTime) >= moment().startOf('day') && new Date(activity.ActivityTime) < moment().endOf('day'));
});
activities.filter((活动)=>{
return(新日期(activity.ActivityTime)>=moment().startOf('day')&新日期(activity.ActivityTime)
const活动=[
{ 
“活动ID”:25,
“警报类型”:1,
“区域”:“北部”,
“活动时间”:“2017-02-01T00:01:01.001Z”,
“测量值”:-1
},
{
“活动ID”:26,
“警报类型”:1,
“区域”:“西部”,
“活动时间”:“2016-04-12T15:13:11.733Z”,
“测量值”:-1
},
{ 
“活动ID”:27,
“警报类型”:1,
“区域”:“北部”,
“活动时间”:“2017-02-01T00:02:01.001Z”,
“测量值”:3
}
]
函数过滤器(arr、arg、_过滤器){
让ret_arr=[]
arr.forEach(元素=>{
if(_过滤器(滤芯,arg))
重新安装推力(元件);
});
返回返回返回
}
let new_arr=过滤器(活动,新日期(“2017-02-01T00:00:00.001Z”),(x,y)=>{
常数间隔=数学绝对值(新日期(x.ActivityTime)-y)/3600000
//以毫秒为单位获取差异,然后将其转换为小时

如果(gap>=-24&&gap Hi Ricardo,您的示例中有很多拼写错误,并且没有在演示文稿上做任何努力。下一次请确保它适合所有人阅读。另一方面,我加入了@Andreas,您在google上搜索过“过滤对象javascript数组”吗你会找到很多解决方案。@ChainList-我很抱歉对齐不好。我不习惯stackoverflow。我也尽了我的能力来找到解决方案。但不幸的是,我找不到。这就是为什么来这里:)@Andreas-我肯定会研究格式,因为我是新来的。这次请原谅。您的
第一个
参数将是数组中的值。您想将它与什么
第二个
参数进行比较?当天(今天)?改天吧?嗨Bergi..我试着把它和其他物体进行比较。意思是,在第二个论点中,我认为另一个物体会被拿走。但似乎我错了。我感谢你的回答。我可以知道是否有其他方法使用“仅ES6”吗我建议所有有时间和日期的操作都使用momentJS库,并且仅当您需要将文本转换为日期或类似的简单情况时才使用日期构造函数。在js中原生日期的工作方式有很多神奇和不方便之处,更不用说dif中某些边缘情况的不同实现了不同的浏览器。Ivan..它不起作用…请注意,我不能传递任何特定的日期作为输入。它应该检查所有对象并找到属于同一日期的条目。不在日期范围内。momentJS库很重。但我用webpack编译了你的应用程序,试着改用
日期fns
。很棒的树震动。亚瑟..太棒了。。!正确获取了输出。在将其标记为答案之前,我只想澄清一件事。如果这听起来有点傻,很抱歉。筛选函数中“y”的值是多少?新日期(x.ActivityTime)-y。无论你想以arg的形式传递给过滤器函数,你都会在arrow函数中得到它。在这个特定示例中,我们将日期对象以“arg”的形式传递给函数过滤器,然后在arrow函数中以“y”的形式得到它,并通过查找差异继续。我们可以只做(new Date(x.ActivityTime)-new Date(例如,“2017-02-01T00:00:00.001Z”)),但每次调用arrow函数时都会产生一个冗余的日期实例化,而且在需要修改过滤器逻辑的任何其他情况下都无法使用它。这很有意义……非常感谢Arthur。非常感谢。