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

时间:2015-07-22 03:06:15

标签: javascript arrays sorting underscore.js

我有以下对象数组,其中键是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?

2 个答案:

答案 0 :(得分:12)

不,这不是一个数组,它是一个对象,而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; } );

如果您不想重构数据,可以按照您想要的顺序迭代它,方法是获取一系列密钥并对该数组进行排序,然后使用该数组访问您的对象' s属性,但每次想要按特定顺序迭代它时都需要这样做,因为对象中仍然没有存储订单信息:

// 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及更早版本的浏览器。

答案 1 :(得分:0)

这是我为用例所做的工作,希望对您有帮助

var list = {30: "103", 40: "75", 50: "116", 100: "15"};
// Reverse sorting on key
const keysSorted = Object.keys(list).sort(function(a,b){return b-a})
console.log(keysSorted);

const arr = [];
// Adding the sorted result to an array of object
for (let i=0; i<keysSorted.length;i++) {
  const obj = {};
  obj.per= keysSorted[i];
  obj.val= list[keysSorted[i]];
  arr.push(obj);
}

console.log(arr);