为了账号安全,请及时绑定邮箱和手机立即绑定

在推送到数组时对项目进行排序

在推送到数组时对项目进行排序

开心每一天1111 2023-04-27 10:49:31
我想在将项目推送到数组时对日期和时间进行排序。到目前为止,我只能对日期进行排序,但无法对时间进行排序。如果同一日期有两次,那么如何先对日期进行排序,然后再对该日期的时间进行排序。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']
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

你可以尝试这样的事情:


function compare (a,b) {

    if(a<b) return -1;

    else if(a>b) return 1;

    else return 0;

}


items.sort((a,b) => {

    let d = compare(a.date, b.date);

    if(d < 0) return -1;

    else if(d > 0) return 1;

    else {

         //Same date compare time

        let t = compare(a.time, b.time);

        if(t < 0) return -1;

        else if(t > 0) return 1;

        else return 0;



    }


});




这首先比较日期。如果日期不同,则无需比较时间。如果日期相同,您可以比较时间。


查看完整回答
反对 回复 2023-04-27
?
12345678_0001

TA贡献1802条经验 获得超5个赞

let sortedData = [headers, ...dataArr.sort((a, b) => a[1].localeCompare(b[1])==0 ? a[2].localeCompare(b[2]) : a[1].localeCompare(b[1]))];

let items = [

{'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'}

];


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])==0 ? a[2].localeCompare(b[2]) : a[1].localeCompare(b[1]))];

console.log(sortedData)


查看完整回答
反对 回复 2023-04-27
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

尝试在单个排序函数中对日期和时间进行排序


let 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'}

];


let dd = ss.sort((a,b)=>new Date(a.date+':'+a.time) - new Date(b.date+':'+b.time))


console.log(dd)


查看完整回答
反对 回复 2023-04-27
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信