Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 - Fatal编程技术网

Javascript 比较数组的日期项并找到最大值

Javascript 比较数组的日期项并找到最大值,javascript,Javascript,我有一些json,它返回许多日期,如下所示: { "items": [{ "metafield1": "May 22 2019" }, { "metafield1": null }, { "metafield1": null }, { "metafield1": "May 20 2019" }] } 然后

我有一些json,它返回许多日期,如下所示:

{
  "items": [{
    "metafield1": "May 22 2019"
  }, {
    "metafield1": null
  }, {
    "metafield1": null
  }, {
    "metafield1": "May 20 2019"
  }]
}
然后我得到了一个ajax调用,它获取数据并循环检查它是否不等于null

success: function(result) {
        var obj = JSON.parse(result);
                obj = obj["items"];
                for(var i of obj){
    if(i.metafield1 !== null){
        console.log(i.metafield1);
    }
}
这个返回类似这样的值

2019年5月22日

2019年5月20日

我现在需要比较这些日期,找出最高的(未来最远的一个)。 我知道我可以和date对象进行日期比较,比如

var date1 = May 22 2019
var date2 = May 20 2019

var newdate1 = new Date(date1)
var newdate2 = new Date(date2)
if (newdate1 > newdate2){
   var biggest_date = newdate1
}
else {
   var biggest_date = newdate2
}
或者类似的事情。我的问题是,如果循环中有两个以上的项,如何在循环中分配这些项并使其工作。 假设我的循环返回这个

2019年5月22日

2019年5月20日

2019年7月20日

如何获取并比较这三个值(它们是动态的,因此它们的数量会有所不同)以找到最大的日期?

您可以尝试以下方法

  • items
    数组中包含NOTNULL
    metafield1
  • 返回日期最大的对象的结果数组
let obj={“items”:[{“metafield1”:“2019年5月22日”},{“metafield1”:null},{“metafield1”:null},{“metafield1”:“2019年5月20日”},{“metafield1”:“2019年6月20日”};
让最大的_date=obj.items.filter(v=>v.metafield1)
.reduce((a,c)=>新日期(a.metafield1)-新日期(c.metafield1)>0?a:c)
.metafield1;

console.log(最大的\u日期)
您可以使用
reduce
在数组中循环并检查
metafield1
是否为空,如果不为空,则比较日期

let obj={“items”:[{“metafield1”:“2019年5月22日”},{“metafield1”:null},{“metafield1”:null},{“metafield1”:“2019年5月20日”};
让结果=对象项减少((c,v)=>{
如果(v.metafield1)返回新日期(c)>新日期(v.metafield1)?c:v.metafield1;
返回c;
},空);
控制台日志(结果)
  • 使用过滤空值
  • 然后使用将日期字符串转换为时间
  • 最后使用get highest value。然后再次查找索引使用
    array[index]
  • var arr={“items”:[{“metafield1”:“2019年5月22日”},{“metafield1”:null},{“metafield1”:null},{“metafield1”:“2019年5月20日”}
    var a=arr.items.map(i=>i.metafield1.filter(i=>i)
    var m_arr=a.map(d=>newdate(d.getTime());
    var res=a[m_arr.indexOf(Math.max(…m_arr));
    console.log(res)
    您可以参考