使用多个json数组按日期对Json进行排序并显示结果

时间:2019-07-08 14:41:16

标签: javascript json date

我有多个json,并希望通过循环显示信息。但是我想按最新日期显示信息。 样本数据: here is sample data

var data = JSON.parse(CustomerProfile.custom.BackInStockData);
var bisData = bisData1.sort(function(a,b){return Math.abs(new Date(a.createdAt) - new Date(b.createdAt))});

它应该显示如下结果: 发送2019年7月8日 发送2019年7月8日 发送2019年7月5日 发送2019年7月5日 发送2019年7月4日

样本数据:

2 个答案:

答案 0 :(得分:0)

替换此行:

bisData1.sort(function(a,b){return Math.abs(new Date(a.createdAt) - new Date(b.createdAt))});

与此:

bisData1.sort(function(a,b){ return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime() });

它应该可以工作

答案 1 :(得分:0)

OP具有参考错误,因为未声明 bisData1 或未为其分配值。

假设已修复并且将数组分配给 bisData1 ,则将 bisData1.sort 的结果分配给 bisData 会创建两个引用相同的数组。

如评论中所述,您不应使用 Math.abs ,因为 sort 要求结果为负数,零或正数。

尝试引用“创建于”属性时,使用了错误的属性名称。

重现问题所需的所有代码都应以文本形式而不是图像形式发布在问题中。

链接的代码图像具有语法错误。您可能要说的是这样的:

let data = [
{"Created At": "Mon Jul 04 2019 13:05:21 GMT-0000 (GMT)","status":"send"},
{"Created At": "Mon Jul 08 2019 13:06:02 GMT-0000 (GMT)","status":"send"},
{"Created At": "Mon Jul 08 2019 14:07:59 GMT-0000 (GMT)","status":"send"},
{"Created At": "Mon Jul 05 2019 13:27:17 GMT-0000 (GMT)","status":"send"},
{"Created At": "Mon Jul 05 2019 13:27:17 GMT-0000 (GMT)","status":"send"}];

data.sort(function(a,b){return new Date(a['Created At']) - new Date(b['Created At'])});

console.log(data);

这将按预期工作,并对 data 数组进行排序。

关于使用内置解析器解析字符串的信息,请参见Why does Date.parse give incorrect results?MDN: Date.parse