如何使用javascript根据日期键对对象数组进行排序?
我有一个javascript数组,如下所示(日期为如何使用javascript根据日期键对对象数组进行排序?,javascript,arrays,sorting,date,object,Javascript,Arrays,Sorting,Date,Object,我有一个javascript数组,如下所示(日期为mm-dd-yyyy格式) [ {'12-11-2018': 'NA' }, { '12-05-2018': 'NA' }, { '12-09-2018': 'pass' }, { '12-07-2018': 'pass' }, { '12-10-2018': 'pass' }, { '12-08-2018': 'pass' }, { '12-06-2018': 'pass' } ] 我想用日期按升序排序 预期产
mm-dd-yyyy
格式)
[
{'12-11-2018': 'NA' },
{ '12-05-2018': 'NA' },
{ '12-09-2018': 'pass' },
{ '12-07-2018': 'pass' },
{ '12-10-2018': 'pass' },
{ '12-08-2018': 'pass' },
{ '12-06-2018': 'pass' }
]
我想用日期按升序排序
预期产出
[
{ '12-05-2018': 'NA' },
{ '12-06-2018': 'pass' },
{ '12-07-2018': 'pass' },
{ '12-08-2018': 'pass' },
{ '12-09-2018': 'pass' },
{ '12-10-2018': 'pass' },
{ '12-11-2018': 'NA' }
]
您可以获取每个对象的第一个键,将其转换为日期,然后通过比较这些日期来运行排序:
const数据=[{
“12-11-2018”:“不适用”
},
{
“12-05-2018”:“不适用”
},
{
“12-09-2018”:“通过”
},
{
“12-07-2018”:“通过”
},
{
“2018年10月12日”:“通过”
},
{
“12-08-2018”:“通过”
},
{
“12-06-2018”:“通过”
}
]
const getDate=str=>{
const parts=str.split('-')
返回新日期(零件[0],零件[1]-1,零件[2])
}
const getFirstKey=obj=>Object.keys(obj)[0]
const fullConversion=dateStr=>getDate(getFirstKey(dateStr))
常量分拣机=(a,b)=>fullConversion(a) console.dir(result)
您可以获取每个对象的第一个键,将其转换为日期,然后通过比较这些日期来运行排序:
const数据=[{
“12-11-2018”:“不适用”
},
{
“12-05-2018”:“不适用”
},
{
“12-09-2018”:“通过”
},
{
“12-07-2018”:“通过”
},
{
“2018年10月12日”:“通过”
},
{
“12-08-2018”:“通过”
},
{
“12-06-2018”:“通过”
}
]
const getDate=str=>{
const parts=str.split('-')
返回新日期(零件[0],零件[1]-1,零件[2])
}
const getFirstKey=obj=>Object.keys(obj)[0]
const fullConversion=dateStr=>getDate(getFirstKey(dateStr))
常量分拣机=(a,b)=>fullConversion(a)
您需要使用排序数组。所以,使用它,在函数中使用获取对象(日期)的键,并将其转换为日期对象,然后进行比较
var res = arr.sort((a,b) => new Date(Object.keys(a)[0]) - new Date(Object.keys(b)[0]));
var-arr=[
{'12-11-2018':'NA'},
{'12-05-2018':'NA'},
{'12-09-2018':'pass'},
{'12-07-2018':'pass'},
{'12-10-2018':'pass'},
{'12-08-2018':'pass'},
{'12-06-2018':'pass'}
];
var res=arr.sort((a,b)=>新日期(Object.keys(a)[0])-新日期(Object.keys(b)[0]);
控制台日志(res)代码>您需要使用排序数组。所以,使用它,在函数中使用获取对象(日期)的键,并将其转换为日期对象,然后进行比较
var res = arr.sort((a,b) => new Date(Object.keys(a)[0]) - new Date(Object.keys(b)[0]));
var-arr=[
{'12-11-2018':'NA'},
{'12-05-2018':'NA'},
{'12-09-2018':'pass'},
{'12-07-2018':'pass'},
{'12-10-2018':'pass'},
{'12-08-2018':'pass'},
{'12-06-2018':'pass'}
];
var res=arr.sort((a,b)=>新日期(Object.keys(a)[0])-新日期(Object.keys(b)[0]);
控制台日志(res)代码>假设日期为MM-DD-YYYY格式,您可以将其重新格式化为ISO 8601并使用localeCompare作为字符串进行排序。这避免了内置的日期分析器和相关问题,例如
var数据=[
{'12-11-2018':'NA'},
{'12-05-2018':'NA'},
{'12-09-2018':'pass'},
{'12-07-2018':'pass'},
{'12-10-2018':'pass'},
{'12-08-2018':'pass'},
{'12-06-2018':'pass'}
];
让mix=d=>d.replace(/(\d+)-(\d+)-(\d+)/,“$3$1$2”);
让key=Object.keys;
data.sort((a,b)=>mix(键(a)[0])。localeCompare(键(b)[0]));
log(JSON.stringify(data.replace(/,/g,,\n'))代码>假设日期为MM-DD-YYYY格式,您可以将其重新格式化为ISO 8601并使用localeCompare作为字符串进行排序。这避免了内置的日期分析器和相关问题,例如
var数据=[
{'12-11-2018':'NA'},
{'12-05-2018':'NA'},
{'12-09-2018':'pass'},
{'12-07-2018':'pass'},
{'12-10-2018':'pass'},
{'12-08-2018':'pass'},
{'12-06-2018':'pass'}
];
让mix=d=>d.replace(/(\d+)-(\d+)-(\d+)/,“$3$1$2”);
让key=Object.keys;
data.sort((a,b)=>mix(键(a)[0])。localeCompare(键(b)[0]));
log(JSON.stringify(data.replace(/,/g,,\n'))
到目前为止您尝试了什么?我相信您的预期输出中有错误,'12-06-2018'
在输入中是'pass'
,但在输出中是'NA'
您尝试了什么?我相信您的预期输出中有错误,'12-06-2018'
在输入中是'pass'
,但是输出“12-08-2018”中的'NA'
不是ECMA-262支持的格式,因此解析依赖于实现,您无法确保使用内置解析器按预期对对象进行排序。颠倒顺序没有帮助。OP是m-d-y顺序的,反向生成的y-d-m不太可能按要求进行解析。“12-08-2018”不是ECMA-262支持的格式,因此解析依赖于实现,您无法确保使用内置解析器按预期对对象进行排序。反向顺序没有帮助。OP的顺序是m-d-y,反转得到的是y-d-m,不太可能按要求进行解析。值得投票,因为您正确解析了时间戳。:-)@谢谢你!在jsWorth a vote中,当涉及到时间戳时,我总是非常谨慎,因为您正确地解析了时间戳。:-)@谢谢你!对于js中的时间戳,我总是非常谨慎