为了账号安全,请及时绑定邮箱和手机立即绑定

请问按带有日期值的单键对象数组进行排序

请问按带有日期值的单键对象数组进行排序

红糖糍粑 2019-08-02 14:02:24
按带有日期值的单键对象数组进行排序我有一个带有几个键值对的对象数组,我需要根据‘update_at’对它们进行排序:[     {         "updated_at" : "2012-01-01T06:25:24Z",         "foo" : "bar"     },     {         "updated_at" : "2012-01-09T11:25:13Z",         "foo" : "bar"     },     {         "updated_at" : "2012-01-05T04:13:24Z",         "foo" : "bar"     }]最有效的方法是什么?
查看完整描述

4 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

你可以用Array.sort.

下面是一个(未经测试的)示例:

arr.sort(function(a, b){
    var keyA = new Date(a.updated_at),
        keyB = new Date(b.updated_at);
    // Compare the 2 dates
    if(keyA < keyB) return -1;
    if(keyA > keyB) return 1;
    return 0;});




查看完整回答
反对 回复 2019-08-03
?
Helenr

TA贡献1780条经验 获得超3个赞

我在这里已经回答了一个类似的问题:对对象数组进行排序的简单函数

对于这个问题,我创建了一个小函数,它可以做您想做的事情:

function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });}




查看完整回答
反对 回复 2019-08-03
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这个Array.Sort()方法对数组的元素进行排序,并返回该数组。小心Array.Sort()因为它不是不变..对于不可变的排序使用不可变排序.

此方法是使用当前的updated_atISO格式。我们用new Data(iso_string).getTime()若要将ISO时间转换为Unix时间戳,请执行以下操作。Unix时间戳是一个我们可以对其进行简单计算的数字。我们减去第一个和第二个时间戳,结果是;如果第一个时间戳大于第二个时间戳,返回数将是正数。如果第二个数字大于第一个,则返回值为负数。如果两者相同,则返回为零。这完全符合内联函数所需的返回值。

ES6:

arr.sort((a,b) => new Date(a.updated_at).getTime() - new Date(b.updated_at).getTime());

ES5:

arr.sort(function(a,b){ 
 return new Date(a.updated_at).getTime() - new Date(b.updated_at).getTime();});

如果你改变了updated_at要成为Unix时间戳,您可以这样做:

ES6:

arr.sort((a,b) => a.updated_at - b.updated_at);

ES5:

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

在这篇文章发表时,现代浏览器不支持ES6。要在现代浏览器中使用ES6,请使用巴贝尔将代码转换到ES5。预期浏览器支持ES6在不久的将来。

Array.Sort()是否应将三种可能的结果之一的返回值重新计算在内:

  • 正数(第一项>第二项)
  • 负数(第一项<第二项)
  • 如果两项相等,则为0。

注意,内联函数的返回值可以是任何正数或负数。Sort()不关心返回号是什么。它只关心返回值是正、负还是零。

对于不可变的排序:(例如在ES6中)

const sort = require('immutable-sort');const array = [1, 5, 2, 4, 3];const sortedArray = sort(array);

你也可以这样写:

import sort from 'immutable-sort';const array = [1, 5, 2, 4, 3];const sortedArray = sort(array);

从您看到的导入是一种在ES6中包含javascript的新方法,并使您的代码看起来非常干净。我个人的最爱。

不可变排序不会改变源数组,而是返回一个新数组。使用const推荐用于不可变数据。




查看完整回答
反对 回复 2019-08-03
  • 4 回答
  • 0 关注
  • 367 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信