Angular8:按小时排列数组序列
Angular 8: Arrange array sequences by hour
我有一个像
这样的数组
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 点等。
有办法吗?
你试过了吗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);
您可以像@GabrielBiga 的参考资料一样尝试
工作示例:Stackblitz
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;
});
添加新的 属性 fullhour:
this.array.forEach(x => {
const time = parseInt(a.hour);
x.fullhour = a.hour.indexOf('pm') >= 0 ? time + 12 : time;
})
然后按 fullhour.
排序
您可以像这样编写自己的排序函数:
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": []
}
]
我有一个像
这样的数组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 点等。 有办法吗?
你试过了吗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);
您可以像@GabrielBiga 的参考资料一样尝试
工作示例:Stackblitz
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;
});
添加新的 属性 fullhour:
this.array.forEach(x => {
const time = parseInt(a.hour);
x.fullhour = a.hour.indexOf('pm') >= 0 ? time + 12 : time;
})
然后按 fullhour.
排序您可以像这样编写自己的排序函数:
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": []
}
]