2013-04-05 70 views
1

我有以下阵列(这里显示为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 

应该给予正确的结果,但它不”似乎。

我会做什么错?

回答

1

您的排序功能不正确。逻辑是相反的,因为您的排序功能指示较小的值为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 
}); 
+0

感谢:

如下改写了!我以某种方式设法让数据的JSON表示感到困惑,因为我意外地认为“低于”“低于JSON表示”而不是“低于指数”。 – 2013-04-05 16:58:03