角度 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 点等等。 有没有办法做?

你可以尝试像这个参考从@GabrielBiga

工作示例:堆栈闪电战

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

你试过 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);

你可以像这样编写自己的排序函数:

const times = [
{hour: '3pm', data:[]},
{hour: '8am', data:[]},
{hour: '9am', data:[]},
{hour: '12pm', data:[]},
{hour: '12am', data:[]}, // Added for example
{hour: '2pm', data:[]},
{hour: '10am', data:[]},
{hour: '1pm', data:[]} 
];
const toFullHour = hour => {
let fullHour = parseInt(hour);
if (fullHour === 12) fullHour = 0;
if (~hour.indexOf('pm')) fullHour += 12;
return fullHour;
};
times.sort((a, b) => toFullHour(a.hour) - toFullHour(b.hour));
console.log(times);

输出:

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

添加一个新属性fullhour

this.array.forEach(x => {
const time = parseInt(a.hour);
x.fullhour = a.hour.indexOf('pm') >= 0 ? time + 12 : time;
})

然后按整小时排序。

最新更新