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

标签 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 中执行此操作?

最佳答案

不,那不是一个数组,它是一个对象,并且 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 和更旧的浏览器。

关于javascript - 在 Javascript/underscore 上按对象键降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31553155/

相关文章:

c - 如何将二维数组的基地址赋给指针

python - 有没有更快、更简单的方法来随机排列这些问题的顺序?

javascript - 连字符不允许 jQuery AJAX 调用正常工作

javascript - 表单中的多个 jqueryfileupload 小部件

javascript - 如果我添加 ng-if,Angular ng-show 将不起作用

javascript - Controller 范围之外的自定义选择指令 - 生成空选项

c++ - 插入排序算法在放入函数时表现不同

php - 展平具有父子关系的数组,以便所有子项都在父级

javascript - 类似于 google+ 相册 View 的动态图像排序和裁剪

jquery - DataTable jquery - 如何从第一列中删除排序图标?