次の配列があります (ここでは 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
プロパティの値が最も高いオブジェクトを配列の先頭に配置して、この配列を並べ替える必要があります。
次のコードを使用します ( 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
正しい結果が得られるはずですが、そうではないようです。
私は何が間違っているのでしょうか?