提问者:小点点

字符串中按时间排序的数组


我有一个对象数组。 我想根据对象键对数组进行排序。 例如下面-

{
   "id": 3511,
   "time": "03:30",
   "hour": 3,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},
{
   "id": 3514,
   "time": "04:30",
   "hour": 4,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},
{
   "id": 3513,
   "time": "04:00",
   "hour": 4,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},

我想像这样按时间排序-

{
   "id": 3511,
   "time": "03:30",
   "hour": 3,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},
{
   "id": 3513,
   "time": "04:00",
   "hour": 4,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},
{
   "id": 3514,
   "time": "04:30",
   "hour": 4,
   "utc_date_time": "2020-07-07T02:07:54.000Z",
   "members": 0
},

我用了这个函数来排序,但是它没有给出预期的输出。我也用了时间键,还是一样。

timeSlots.sort(function(a, b) {
  return a.time- b.time;
});

但没有得到预期的输出。


共3个答案

匿名用户

由于.time值的格式为hh:mm,因此可以将它们作为字符串进行排序:

null

let array = [{
    "id": 3511,
    "time": "03:30",
    "hour": 3,
    "utc_date_time": "2020-07-07T02:07:54.000Z",
    "members": 0
  },
  {
    "id": 3514,
    "time": "04:30",
    "hour": 4,
    "utc_date_time": "2020-07-07T02:07:54.000Z",
    "members": 0
  },
  {
    "id": 3513,
    "time": "04:00",
    "hour": 4,
    "utc_date_time": "2020-07-07T02:07:54.000Z",
    "members": 0
  }
];

array.sort((a, b) => a.time.localeCompare(b.time));
console.log(array);

匿名用户

Lodash的“sortby”非常适合这一点。

_.sortBy(timeSlots, 'time');

匿名用户

let arr =    [{
        "id": 3511,
        "time": "03:30",
        "hour": 3,
        "utc_date_time": "2020-07-07T02:07:54.000Z",
        "members": 0
    },
    {
        "id": 3514,
        "time": "04:30",
        "hour": 4,
        "utc_date_time": "2020-07-07T02:07:54.000Z",
        "members": 0
    },
    {
        "id": 3513,
        "time": "04:00",
        "hour": 4,
        "utc_date_time": "2020-07-07T02:07:54.000Z",
        "members": 0
    }]
    

sortedArr = arr.sort(function(a, b){
                if (a['time'] < b['time']) return -1;
                if (a['time'] > b['time']) return 1;
                return 0
           })

console.log(`sorted: `, sortedArr);