首页 > 解决方案 > Angular 8:按小时排列数组序列

问题描述

我有一个像

array: [
{hour: 3pm, data:[]},
{hour: 8am, data:[]},
{hour: 9am, data:[]},
{hour: 12pm, data:[]},
{hour: 2pm, data:[]},
{hour: 10am, data:[]},
{hour: 1pm, data:[]},
{hour: 11am, data:[]},
]; 

我希望它按小时升序排列

array: [
{hour: 8am, data:[]},
{hour: 9am, data:[]},
{hour: 10am, data:[]},
{hour: 11am, data:[]},
{hour: 12pm, data:[]},
{hour: 1pm, data:[]},
{hour: 2pm, data:[]},
{hour: 3pm, data:[]},
];

我尝试使用排序,但我得到的结果是

array:[
{hour:08, data:[]},
{hour:09, data:[]},
...
];

我希望时间保持在上午 8 点、上午 9 点等。有什么办法吗?

标签: arraysangularsequence

解决方案


你试过Array.sort吗?

let x = [
    {hour: '3pm', data:[]},
    {hour: '8am', data:[]},
    {hour: '9am', data:[]},
    {hour: '12pm', data:[]},
    {hour: '2pm', data:[]},
    {hour: '10am', data:[]},
    {hour: '1pm', data:[]} 
]; 

let final = x.sort((a, b) => {
    let time1 = parseInt(a.hour);
    let time2 = parseInt(b.hour);
    if(a.hour.match(/.*pm/)) time1 += 12; 
    if(b.hour.match(/.*pm/)) time2 += 12;
    if (time1 < time2) return -1;
    if (time1 > time2) return 1;
    return 0; 
});

console.log(final);

推荐阅读