我有一个像这样的数组
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;
})
然后按整小时排序。