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