我需要将所有空值最后放置在数组中。下面的代码显示了我的尝试
1)此代码最后将所有空值发送到数组中,但其他值未按排序方式显示。
var dateArray = [
'','',
new Date('2019-06-28',).toISOString().slice(0, 10).replace(/-/g, "."),
'',
new Date('2019-06-01').toISOString().slice(0, 10).replace(/-/g, "."),
new Date('2019-06-02').toISOString().slice(0, 10).replace(/-/g, "."),
'',''
]
dateArray.sort(function(a, b) {
return (a ==='') - (b ==='') || a - b;
});
console.log(dateArray)
2)当我删除此.toISOString().slice(0, 10).replace(/-/g, ".")
时,它可以正常工作,但在输出Fri Jun 28 2019 05:30:00 GMT+0530
中显示完整日期(印度标准时间)。我只需要显示这种格式'2019.06.28'
var dateArray = [
'','',
new Date('2019-06-28',),
'',
new Date('2019-06-01'),
new Date('2019-06-02'),
'',''
]
dateArray.sort(function(a, b) {
return (a ==='') - (b ==='') || a - b;
});
console.log(dateArray)
答案 0 :(得分:3)
您的最新版本有效是因为
new Date() - new Date()
将日期转换为数字(自1970年以来的毫秒数),而:
'2019-06-01' - '2019-06-01'
不起作用,因为字符串无法转换为数字。因此,a - b
并不是比较它们的正确方法。要比较字符串,请使用a.localeCompare(b)
。
答案 1 :(得分:1)
怎么样?
var dateArray = [
'','',
new Date('2019-06-28').toISOString().slice(0, 10).replace(/-/g, "."),
'',
new Date('2019-06-01').toISOString().slice(0, 10).replace(/-/g, "."),
new Date('2019-06-02').toISOString().slice(0, 10).replace(/-/g, "."),
'',''
]
dateArray.sort(function(a, b) {
return (a ==='') - (b ==='') || new Date(a) - new Date(b);
});
答案 2 :(得分:1)
尝试一下:
const formatDate = (t)=> t.getFullYear() +"."+ (t.getMonth() + 1) + "." + (""+t.getDate()).padStart(2,'0')
var dateArray = [
'','',
formatDate(new Date('2019-06-28',)),
'',
formatDate(new Date('2019-06-01')),
formatDate(new Date('2019-06-02')),
'',''
]
dateArray.sort(function(a, b) {
return (a ==='') - (b ==='') || new Date(a) - new Date(b);
});
console.log(dateArray)