我有以下数组(此处显示为JSON):
[{
"value": -1,
"absolute": false,
"callTime": 0
}, {
"value": 23,
"absolute": true,
"callTime": 1365179295887
}, {
"value": 1,
"absolute": false,
"callTime": 0
}, {
"value": 1,
"absolute": true,
"callTime": 0
}]
我需要通过将具有最高callTime
属性值的对象放在数组顶部来对此数组进行排序。
我使用以下代码(基于主题offered by MDN的解释):
var handlers = JSON.parse("[...]");
handlers.sort(function(firstHandler, secondHandler) {
if (firstHandler.callTime < secondHandler.callTime) {
return -1; // sort firstHandler to a lower index than secondHandler.
} else {
return 1; // sort secondHandler to a lower index than firstHandler.
}
return 0;
});
console.log(JSON.stringify(handlers));
运行该函数后,我得到以下输出:
[{
"value": 1,
"absolute": true,
"callTime": 0
}, {
"value": 1,
"absolute": false,
"callTime": 0
}, {
"value": -1,
"absolute": false,
"callTime": 0
}, {
"value": 94,
"absolute": true,
"callTime": 1365179553381
}]
这似乎与我期望的相反(请注意callTime
与零不同的唯一对象是如何在底部)。
我认为在这里我可能会遗漏一些大事,或者我可能只是误导了,但也将功能的主体改为:
return firstHandler.callTime - secondHandler.callTime
应该给出正确的结果,但似乎没有。
我可能做错了什么?
答案 0 :(得分:1)
您的排序功能不正确。逻辑相反,因为您的sort函数指示较小值为callTime
的元素首先出现,而您希望较大的值位于数组的顶部。此外,您始终返回-1或1,而不是0.当元素绑定时,它应返回0.
重写如下:
handlers.sort(function(firstHandler, secondHandler) {
if (firstHandler.callTime > secondHandler.callTime) {
return -1; // sort firstHandler to a LOWER index than secondHandler.
} else if (firstHandler.callTime < secondHandler.callTime) {
return 1; // sort secondHandler to a LOWER index than firstHandler.
}
return 0; // sort firstHandler and secondHandler as equal
});