我有以下对象数组,其中键是 UTC 格式的日期。
Array = [{1436796000000:["Task1","Task2"],
1437400800000:["Task4","Task8"],
1436968800000: ["Task3","Task2"],
1436882400000:["Task5","Task6"]}]
我想按降序按键对这个数组对象进行排序。因此,预期的输出将像最新日期一样紧随其后。
Array = [{1437400800000:["Task4","Task8"],
1436968800000: ["Task3","Task2"],
1436882400000:["Task5","Task6"],
1436796000000:["Task1","Task2"]}]
我如何在 javascript 或使用 underscore.js 中执行此操作?
最佳答案
不,那不是一个数组,它是一个对象,并且 Javascript 对象的属性根据定义是无序的;所以对它们进行排序是没有意义的。
您可以改用一个数组,它确实有顺序,并像这样重组您的数据:
var arr = [
{ date: 1436796000000, value: ["Task1","Task2"] },
{ date: 1437400800000, value: ["Task4","Task8"] },
{ date: 1436968800000, value: ["Task3","Task2"] },
{ date: 1436882400000, value: ["Task5","Task6"] }
]
然后你可以按日期排序:
arr.sort( function ( a, b ) { return b.date - a.date; } );
如果你不想重组你的数据,你可以按照你想要的顺序遍历它,通过获取它的键数组并对该数组进行排序,然后使用该数组访问你的对象的属性,但是你会每次您想以特定顺序遍历它时都需要这样做,因为对象中仍然没有存储顺序信息:
// Get the array of keys
var keys = Object.keys( obj );
// Sort the keys in descending order
keys.sort( function ( a, b ) { return b - a; } );
// Iterate through the array of keys and access the corresponding object properties
for ( var i = 0; i < keys.length; i++ ) {
console.log( keys[i], obj[ keys[i] ] );
}
您需要填充 Object.keys以支持 IE 8 和更旧的浏览器。
关于javascript - 在 Javascript/underscore 上按对象键降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31553155/