Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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_String_Date_Sorting - Fatal编程技术网

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]))];