[英]Array sorting according to time in string
我有一个对象数组。 我想根据 object 键对数组进行排序。 例如下面 -
{
"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
},
我已经使用这个 function 进行排序,但它没有给出预期的 output 我也使用了时间键,仍然相同。
timeSlots.sort(function(a, b) {
return a.time- b.time;
});
但没有得到预期的 output。
由于您的.time
值采用HH:MM
格式,因此您可以将它们排序为字符串:
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');
您可以将比较 function传递给sort
方法,说明您希望如何对数组元素进行排序。 因此,它也提供了一种对对象进行排序的方法。
要按升序排序:
const sortedArrayOfObjects = array.sort((item1, item2) => {
if(item1.id < item2.id) return -1
else if(item1.id > item2.id) return 1
else return 0;
});
compareFunction(a, b)
返回小于 0,则将a
排序到低于b
的索引(即a
先出现)。compareFunction(a, b)
返回 0,则a
和b
彼此保持不变,但对所有不同元素进行排序。compareFunction(a, b)
返回大于 0,则将b
排序到低于a
的索引(即b
排在第一位)。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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.