Sort by object key in descending order on Javascript/underscore

老子叫甜甜 提交于 2019-12-10 13:49:24

问题


I have the following object array where the key is the date in UTC format.

    Array = [{1436796000000:["Task1","Task2"],
         1437400800000:["Task4","Task8"],
         1436968800000: ["Task3","Task2"],
         1436882400000:["Task5","Task6"]}]

I want to sort this array object by key in descending order. So the expected output will be following like the latest date will come first.

    Array = [{1437400800000:["Task4","Task8"],
             1436968800000: ["Task3","Task2"],
             1436882400000:["Task5","Task6"],
             1436796000000:["Task1","Task2"]}]

How can I do this in javascript or using underscore.js?


回答1:


No, that isn't an array, it's an object, and Javascript objects' properties are unordered by definition; so sorting them is meaningless.

You could instead use an array, which does have order, and restructure your data like this:

var arr = [
  { date: 1436796000000, value: ["Task1","Task2"] },
  { date: 1437400800000, value: ["Task4","Task8"] },
  { date: 1436968800000, value: ["Task3","Task2"] },
  { date: 1436882400000, value: ["Task5","Task6"] }
]

and then you can sort it by date:

arr.sort( function ( a, b ) { return b.date - a.date; } );

If you don't want to restructure your data, you can iterate through it in the order you want, by getting an array of its keys and sorting that array, then using that array to access your object's properties, but you will need to do this each time your want to iterate through it in a particular order, since there is still no order information stored in the object:

// 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] ] );
}

You will need to shim Object.keys to support IE 8 and older browsers.




回答2:


In Paulpro answer, I edit javascript array sort function (easy to understand):

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

Here is my example: enter link description here

Here is relative post: enter link description here




回答3:


Here is what I did for my use case hope this helps

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


来源:https://stackoverflow.com/questions/31553155/sort-by-object-key-in-descending-order-on-javascript-underscore

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!