我有一些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日
如何获取和比较这三个值(它们是动态的,因此会改变其中的几个值)以找到最大的日期?
答案 0 :(得分:0)
您可以尝试关注
let obj = {"items": [{"metafield1": "May 22 2019"}, {"metafield1": null}, {"metafield1": null}, {"metafield1": "May 20 2019"}, {"metafield1": "June 20 2019"}]};
let biggest_date = obj.items.filter(v => v.metafield1)
.reduce((a,c) => new Date(a.metafield1) - new Date(c.metafield1) > 0 ? a : c)
.metafield1;
console.log(biggest_date);
答案 1 :(得分:0)
您可以使用reduce
遍历数组,并检查metafield1
是否不为null,如果不是,请比较日期
let obj = {"items":[{"metafield1":"May 22 2019"},{"metafield1":null},{"metafield1":null},{"metafield1":"May 20 2019"}]};
let result = obj.items.reduce((c, v) => {
if (v.metafield1) return new Date(c) > new Date(v.metafield1) ? c : v.metafield1;
return c;
}, null);
console.log(result);
更短版本:
由于new Date(null)
将产生1970-01-01T00:00:00.000Z
,因此您也可以:
let obj = {"items":[{"metafield1":"May 22 2019"},{"metafield1":null},{"metafield1":null},{"metafield1":"May 20 2019"}]};
let result = obj.items.reduce((c, v) => new Date(c) > new Date(v.metafield1) ? c : v.metafield1, null);
console.log(result);
答案 2 :(得分:0)
Array#filter
过滤空值。new Date().getTime()
将日期字符串转换为时间。Math.max()
获得最高价值。然后再次找到索引,使用array[index]
获得价值
var arr = { "items": [{ "metafield1": "May 22 2019" }, { "metafield1": null }, { "metafield1": null }, { "metafield1": "May 20 2019" }] }
var a =arr.items.map(i=> i.metafield1).filter(i=> i)
var m_arr = a.map(d=> new Date(d).getTime());
var res = a[m_arr.indexOf(Math.max(...m_arr))];
console.log(res)