javascript - 按日期排序,空值无效 JSON 对象。
问题描述
抱歉,我是 javascript 新手,但我目前正在尝试根据属性对我的 JSON 对象进行排序,但现在它没有排序。
例如:我尝试这样做:
function sortByKey(array, key)
{
return array.sort(function(a, b) {
let x = a[key];
let y = b[key];
x = new Date(a.dateModified);
y = new Date(b.dateModified);
return x>y ? -1 : x<y ? 1 : 0;
});
}
我尝试根据 "lastCompletedEvaldate" 进行排序:
[
{
"_id": "<a MongoDB object ID>",
"name": "Fred Flintstone",
"email": "fflintstone@hotmail.com",
"sex": "male",
"tags": [
"foo",
"bar"
],
"lastCompletedEvalDate": "2018-05-14 12:02:14.955",
"pendingEvalSentDate": null,
"pendingEvalViewedEmailDate": null,
"pendingEvalClickedLinkDate": null
},
{
"_id": "<a MongoDB object ID>",
"name": "Barney Rubble",
"email": "barney@gmail.com",
"sex": "intersex",
"tags": [],
"lastCompletedEvalDate": "2018-05-14 12:02:14.954",
"pendingEvalSentDate": "2018-05-14 12:02:14.955",
"pendingEvalViewedEmailDate": "2018-05-14 12:02:14.955",
"pendingEvalClickedLinkDate": "2018-05-14 12:02:14.955"
},
{
"_id": "<a MongoDB object ID>",
"name": "Bambam Rubble",
"email": "bam@bam.com",
"sex": null,
"tags": [
"baz"
],
"lastCompletedEvalDate": "2018-05-14 12:02:14.955",
"pendingEvalSentDate": null,
"pendingEvalViewedEmailDate": null,
"pendingEvalClickedLinkDate": null
}
]
但是,当我像这样使用该功能时:
let temp = sortByKey(file, 'lastCompletedEvalDate');
并使用 get 请求输出:
router.get('/dash/participant', function(req, res){
res.send(temp);
});
我仍然得到未排序的相同输出。难道我做错了什么。
解决方案
如果有任何可行的替代方案,您应该始终避免使用内置的 Date 解析器(请参阅为什么 Date.parse 给出不正确的结果?)。在这种情况下,字符串“2018-05-14 12:02:14.955”与 ECMA-262 中的格式不一致,因此实现可能会返回无效的日期(Safari 也会这样做)。
由于日期字符串将作为字符串排序,因此请使用localeCompare而不是创建 Date 对象:
function sortByKey(array, key) {
return array.sort((a,b) => a[key].localeCompare(b[key]));
}
var data = [{
"lastCompletedEvalDate": "2018-05-14 12:02:14.955",
"pendingEvalSentDate": null,
},
{
"lastCompletedEvalDate": "2018-05-14 12:02:14.954",
"pendingEvalSentDate": "2018-05-14 12:02:14.955",
},
{
"lastCompletedEvalDate": "2018-05-14 12:02:14.955",
"pendingEvalSentDate": null,
}
];
sortByKey(data, 'lastCompletedEvalDate');
console.log(data)
推荐阅读
- python - 如何在不使用内置函数的情况下使用特定列按升序对列表进行排序?(Python)
- mysql - 仅返回与 IN 子句中指定的所有值匹配的行
- c# - 重载方法取决于调用实例
- node.js - 为什么我不能在 Rasspian OS 中运行相同的应用程序?
- javascript - JavaScript + JQUERY:基于两个输入变量计算
- python - 大多数pythonic检查列表的方法归结为一个值
- php - 'woocommerce_get_item_data' 未显示在收到的订单页面
- android - com.google.android.glass.media 包不存在
- typescript - Typescript React-native styled-component 中的类型问题
- javascript - 在 a-frame 和 react.js 中播放和暂停视频