按对象键按Javascript /下划线的降序排序

Far*_*sir 5 javascript arrays sorting underscore.js

我有以下对象数组,其中键是UTC格式的日期.

    Array = [{1436796000000:["Task1","Task2"],
         1437400800000:["Task4","Task8"],
         1436968800000: ["Task3","Task2"],
         1436882400000:["Task5","Task6"]}]
Run Code Online (Sandbox Code Playgroud)

我想按键降序排序这个数组对象.因此预期的输出将跟随最新的日期将首先出现.

    Array = [{1437400800000:["Task4","Task8"],
             1436968800000: ["Task3","Task2"],
             1436882400000:["Task5","Task6"],
             1436796000000:["Task1","Task2"]}]
Run Code Online (Sandbox Code Playgroud)

我怎么能在javascript或使用underscore.js这样做?

Pau*_*aul 14

不,这不是一个数组,它是一个对象,Javascript对象的属性按定义是无序的; 所以对它们进行排序毫无意义.

您可以改为使用具有顺序的数组,并重构您的数据,如下所示:

var arr = [
  { date: 1436796000000, value: ["Task1","Task2"] },
  { date: 1437400800000, value: ["Task4","Task8"] },
  { date: 1436968800000, value: ["Task3","Task2"] },
  { date: 1436882400000, value: ["Task5","Task6"] }
]
Run Code Online (Sandbox Code Playgroud)

然后你可以按日期排序:

arr.sort( function ( a, b ) { return b.date - a.date; } );
Run Code Online (Sandbox Code Playgroud)

如果您不想重构数据,可以按照您想要的顺序迭代它,通过获取其数组的数组并对该数组进行排序,然后使用该数组访问对象的属性,但您需要执行此操作这是每次你想以特定的顺序迭代它时,因为对象中仍然没有存储订单信息:

// 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] ] );
}
Run Code Online (Sandbox Code Playgroud)

您需要使用Shim Object.keys来支持IE 8和更旧的浏览器.

  • @NutBoltu不,没有办法.Javascript对象的定义是`一个**无序的**属性集合.但是,您可以获取对象键的数组,对其进行排序,然后像这样迭代:`var keys = Object.keys(obj); keys.sort(function(a,b){return a - b;}); for(var i = 0; i <keys.length; i ++){console.log(keys [i],obj [keys [i]]); }` (2认同)