Javascript 比较数组的日期项并找到最大值
我有一些json,它返回许多日期,如下所示:Javascript 比较数组的日期项并找到最大值,javascript,Javascript,我有一些json,它返回许多日期,如下所示: { "items": [{ "metafield1": "May 22 2019" }, { "metafield1": null }, { "metafield1": null }, { "metafield1": "May 20 2019" }] } 然后
{
"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日
如何获取并比较这三个值(它们是动态的,因此它们的数量会有所不同)以找到最大的日期?您可以尝试以下方法
数组中包含NOTNULLitems
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)
您可以参考