arrays - 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 点等。有什么办法吗?
解决方案
你试过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);
推荐阅读
- sql - SQL:左连接 & 未找到链接
- c# - Unity 不会构建到 Android(几乎是空白项目测试)
- sas - 创建一个字符串在每个 ID 中出现多次的计数
- rest - 不允许使用 Spring Boot REST 方法 - 405 错误请求方法“GET”不支持
- sql - ACCESS 2016 SQL - 仅获取值更改的行
- vb.net - 使用 Linq 对一行中的多行查询进行排序
- xcode10 - Swift:Quick/Nimble 运行异步测试显示错误:'InvalidNimbleAPIUsage',原因:'expect(...).toEventually(...) 只能在主线程上运行。
- php - 如何使用 php 在网页中的任何文本元素旁边添加翻译按钮?
- java - 检查获取链中的任何对象是否为空,而无需检查每个深度
- python - Matplotlib 无法生成准确的滑块图