繁体   English   中英

根据字符串中的时间进行数组排序

[英]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,则ab彼此保持不变,但对所有不同元素进行排序。
  • 如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM