我有一个对象数组。 我想根据对象键对数组进行排序。 例如下面-
{
"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;
});
但没有得到预期的输出。
由于.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);