按两个值对对象的Js数组进行排序



我正在开发一个小型应用程序
,因为我想按两个值对对象数组进行排序
一个是时间戳,一个是字符串

我尝试了下面的片段,但它不满足以下条件

我希望片段中提到的这个对象应该根据对象进行排序。对象应该首先包含作为cricket的sport和作为第二个的空值,并且两者都按日期升序排序

var content =  [
{
"first_name": "musk",
"sport": "cricket",
"created_date": "2022-08-12 04:03:08",            
},
{
"first_name": "john",
"sport": "",
"created_date": "2022-08-01 23:00:46",

},
{
"first_name": "robot",
"sport": "cricket",
"created_date": "2022-08-10 23:00:46",

},
{
"first_name": "roy",
"sport": "",
"created_date": "2022-07-31 23:00:46",

},
]

content.sort(function compare( a, b ) {
if ( a.sport < b.sport || (new Date(a.created_date) < new Date(b.created_date))){
return 1;
}
if ( a.sport > b.sport || (new Date(a.created_date) < new Date(b.created_date)) ){
return -1;
}
return 0;
});

console.log(content)

附上预期结果

预期结果

var content =  [
{
"first_name": "robot",
"sport": "cricket",
"created_date": "2022-08-10 23:00:46",

},

{
"first_name": "musk",
"sport": "cricket",
"created_date": "2022-08-12 04:03:08",            
},
{
"first_name": "roy",
"sport": "",
"created_date": "2022-07-31 23:00:46",

},
{
"first_name": "john",
"sport": "",
"created_date": "2022-08-01 23:00:46",

},

]

有人能帮我解决中的错误吗

这应该完成任务:

var content =  [
{
"first_name": "musk",
"sport": "cricket",
"created_date": "2022-08-12 04:03:08",            
},
{
"first_name": "john",
"sport": "",
"created_date": "2022-08-01 23:00:46",
},
{
"first_name": "robot",
"sport": "cricket",
"created_date": "2022-08-10 23:00:46",
},
{
"first_name": "roy",
"sport": "",
"created_date": "2022-07-31 23:00:46",
},
];
content.sort(function compare(a, b) {
// compare the "sport" fields
if(a.sport > b.sport){
return -1;
}
if(a.sport < b.sport){
return 1;
}
// compare the dates
if(new Date(a.created_date) < new Date(b.created_date)){
return -1;
}
if(new Date(a.created_date) > new Date(b.created_date)){
return 1;
}
return 0;
});
console.log(content);
content.sort(function compare(a, b) {
// compare the "sport" fields based on they include "cricket" string or not
if(a.sport.includes("cricket") && !b.sport.includes("cricket")){
return -1;
}
if(!a.sport.includes("cricket") && b.sport.includes("cricket")){
return 1;
}
// compare the dates
if(new Date(a.created_date) < new Date(b.created_date)){
return -1;
}
if(new Date(a.created_date) > new Date(b.created_date)){
return 1;
}
return 0;
});
console.log(content);

只有当sport值相等时才检查日期比较,如下所示:

var content =  [
{
"first_name": "musk",
"sport": "cricket",
"created_date": "2022-08-12 04:03:08",            
},
{
"first_name": "john",
"sport": "",
"created_date": "2022-08-01 23:00:46",

},
{
"first_name": "robot",
"sport": "cricket",
"created_date": "2022-08-10 23:00:46",

},
{
"first_name": "roy",
"sport": "",
"created_date": "2022-07-31 23:00:46",

},
]

content.sort(function compare( a, b ) {
if(a.sport === b.sport) {
return (new Date(a.created_date) < new Date(b.created_date)) ? -1 : new Date(a.created_date) === new Date(b.created_date) ? 0 : 1
}
return a.sport < b.sport ? 1: -1
});

console.log(content)

最新更新