在 Javascript/underscore 上按对象键降序排序

Sort by object key in descending order on Javascript/underscore

我有以下对象数组,其中键是 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 和更旧的浏览器。

在Paulpro的回答中,我编辑了javascript数组排序函数(易于理解):

function compare(a,b) {
   if (a.date < b.date )
     return -1;
   if (a.date  > b.date )
    return 1;
   return 0;
}
arr.sort(compare);

这是我的例子:enter link description here

这里是相对的post:enter link description here

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

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);