Javascript 在推送到数组时对项目进行排序
我想在将项目推送到数组时对日期和时间进行排序。到目前为止,我只能对日期进行排序,但无法对时间进行排序。如果同一个日期有两次,那么如何先对日期进行排序,然后再对该日期的时间进行排序Javascript 在推送到数组时对项目进行排序,javascript,arrays,string,date,sorting,Javascript,Arrays,String,Date,Sorting,我想在将项目推送到数组时对日期和时间进行排序。到目前为止,我只能对日期进行排序,但无法对时间进行排序。如果同一个日期有两次,那么如何先对日期进行排序,然后再对该日期的时间进行排序 let items = [ {'id': 'id7', 'date': '2020-08-17', 'time': '05:02:54.000'}, {'id': 'id2', 'date': '2020-05-12', 'time': '02:09:57.000'}, {'id': 'id3', 'date': '
let items = [
{'id': 'id7', 'date': '2020-08-17', 'time': '05:02:54.000'},
{'id': 'id2', 'date': '2020-05-12', 'time': '02:09:57.000'},
{'id': 'id3', 'date': '2020-05-12', 'time': '03:04:44.000'}, //both the 2020-05-12 date has two timings so I want to sort these time too along with the date
{'id': 'id4', 'date': '2020-09-23', 'time': '07:16:23.000'}
];
const headers = [
'ID',
'Date',
'Time'
];
dataArr = []
items.forEach(item => {
dataArr.push([
item.id,
item.date,
item.time
]);
})
;
let sortedData = [headers, ...dataArr.sort((a, b) => a[1].localeCompare(b[1]))];
最终排序的数组必须类似于
['id': 'id2', 'date': '2020-05-12', 'time': '02:09:57.000'],
['id': 'id3', 'date': '2020-05-12', 'time': '03:04:44.000'],
['id': 'id7', 'date': '2020-08-17', 'time': '05:02:54.000'],
['id': 'id4', 'date': '2020-09-23', 'time': '07:16:23.000']
尝试在单个排序函数中同时对日期和时间进行排序
让ss=[
{'id':'id7','date':'2020-08-17','time':'05:02:54.000'},
{'id':'id2','date':'2020-05-12','time':'02:09:57.000'},
{'id':'id3','date':'2020-05-12','time':'03:04:44.000'},
{'id':'id4','date':'2020-09-23','time':'07:16:23.000'}
];
让dd=ss.sort((a,b)=>新日期(a.Date+':'+a.time)-新日期(b.Date+':'+b.time))
console.log(dd)
尝试在单个排序函数中对日期和时间进行排序
让ss=[
{'id':'id7','date':'2020-08-17','time':'05:02:54.000'},
{'id':'id2','date':'2020-05-12','time':'02:09:57.000'},
{'id':'id3','date':'2020-05-12','time':'03:04:44.000'},
{'id':'id4','date':'2020-09-23','time':'07:16:23.000'}
];
让dd=ss.sort((a,b)=>新日期(a.Date+':'+a.time)-新日期(b.Date+':'+b.time))
控制台日志(dd)
let项目=[
{'id':'id7','date':'2020-08-17','time':'05:02:54.000'},
{'id':'id3','date':'2020-05-12','time':'03:04:44.000'},
{'id':'id4','date':'2020-09-23','time':'07:16:23.000'},
{'id':'id2','date':'2020-05-12','time':'02:09:57.000'}
];
常量头=[
“ID”,
“日期”,
“时间”
];
dataArr=[]
items.forEach(item=>{
数据传送推送([
项目编号:,
项目.日期,
项目时间
]);
})
;
让sortedData=[headers,…dataArr.sort((a,b)=>a[1]。localeCompare(b[1])==0?a[2]。localeCompare(b[2]):a[1]。localeCompare(b[1]));
console.log(sortedData)
let项目=[
{'id':'id7','date':'2020-08-17','time':'05:02:54.000'},
{'id':'id3','date':'2020-05-12','time':'03:04:44.000'},
{'id':'id4','date':'2020-09-23','time':'07:16:23.000'},
{'id':'id2','date':'2020-05-12','time':'02:09:57.000'}
];
常量头=[
“ID”,
“日期”,
“时间”
];
dataArr=[]
items.forEach(item=>{
数据传送推送([
项目编号:,
项目.日期,
项目时间
]);
})
;
让sortedData=[headers,…dataArr.sort((a,b)=>a[1]。localeCompare(b[1])==0?a[2]。localeCompare(b[2]):a[1]。localeCompare(b[1]));
console.log(sortedData)
您可以尝试以下方法:
功能比较(a、b){
如果(ab)返回1;
否则返回0;
}
项目排序((a,b)=>{
设d=比较(a.日期,b.日期);
如果(d<0)返回-1;
如果(d>0),则返回1;
否则{
//同一日期比较时间
设t=比较(a.时间,b.时间);
如果(t<0)返回-1;
如果(t>0),则返回1;
否则返回0;
}
});
这将首先比较日期。如果日期不同,则不需要比较时间。如果日期相同,您可以比较时间。您可以尝试以下方法:
功能比较(a、b){
如果(ab)返回1;
否则返回0;
}
项目排序((a,b)=>{
设d=比较(a.日期,b.日期);
如果(d<0)返回-1;
如果(d>0),则返回1;
否则{
//同一日期比较时间
设t=比较(a.时间,b.时间);
如果(t<0)返回-1;
如果(t>0),则返回1;
否则返回0;
}
});
这将首先比较日期。如果日期不同,则不需要比较时间。如果日期相同,您可以比较时间。
a[1]
没有意义;您的数组包含对象。我将其推入dataArr数组,然后将@PointyRight进行比较,但是传递到排序比较器的a
和b
将引用您推入数组的对象。您需要将a.date
与b.date
和a.time
与b.time
进行比较。用date+time
制作时间戳,然后compare@Pointy不过这对我来说是个好日子。a[1]
没有意义;您的数组包含对象。我将其推入dataArr数组,然后将@PointyRight进行比较,但是传递到排序比较器的a
和b
将引用您推入数组的对象。您需要将a.date
与b.date
和a.time
与b.time
进行比较。用date+time
制作时间戳,然后compare@Pointy虽然日期对我有效,但由于某种原因,在我的代码中,它按时间降序显示,尽管日期看起来不错。我尝试了它letsorteddata=[headers,…dataArr.sort((a,b)=>newdate(a[1]+':'+a[2])-newdate(b[1]+':'+b[2])代码>出于某种原因,在我的代码中,它按时间降序显示,尽管日期看起来不错。我尝试了它letsorteddata=[headers,…dataArr.sort((a,b)=>newdate(a[1]+':'+a[2])-newdate(b[1]+':'+b[2])代码>这也不起作用。日期已排序,但时间不正确。这也不起作用。日期已排序,但时间未排序
let sortedData = [headers, ...dataArr.sort((a, b) => a[1].localeCompare(b[1])==0 ? a[2].localeCompare(b[2]) : a[1].localeCompare(b[1]))];