Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript根据日期键对对象数组进行排序?_Javascript_Arrays_Sorting_Date_Object - Fatal编程技术网

如何使用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' } ] 我想用日期按升序排序 预期产

我有一个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' } 
]
我想用日期按升序排序

预期产出

[ 
  { '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中的时间戳,我总是非常谨慎