Arrays 使用多个条件对对象数组进行排序
假设我有一个对象数组:Arrays 使用多个条件对对象数组进行排序,arrays,sorting,Arrays,Sorting,假设我有一个对象数组: let updatedEvents = [ { "code": "3894", "date": "2020-06-01T20:00:00+0300", "timestamp": 1591030800 }, { "code": "1976", "date": "2020-06-01T20:00:00+0300", "timestamp": 1591030800 }, { "code": "0482", "date": "2020-06-01T20:00:00
let updatedEvents = [
{
"code": "3894",
"date": "2020-06-01T20:00:00+0300",
"timestamp": 1591030800
},
{
"code": "1976",
"date": "2020-06-01T20:00:00+0300",
"timestamp": 1591030800
},
{
"code": "0482",
"date": "2020-06-01T20:00:00+0300",
"timestamp": 1591030800
},
{
"code": "0408",
"date": "2020-06-01T20:00:00+0300",
"timestamp": 1591030800
},
];
如果我想按事件日期对它们进行排序,并且如果事件日期在任何事件中都是相同的,则按代码升序对它们进行排序,则以下内容是正确的:
const sortedEventsByDateUniqueCode = updatedEvents.sort((eventOne, eventTwo) => {
if (eventOne.date === eventTwo.date) {
return -1;
}
if (eventOne.code > eventTwo.code) return 1;
if (eventOne.code < eventTwo.code) return -1;
});
const sortedEventsByDateUniqueCode=updateEvents.sort((eventOne,eventTwo)=>{
if(eventOne.date==eventTwo.date){
返回-1;
}
if(eventOne.code>eventTwo.code)返回1;
if(eventOne.code
您可以在排序中放置或条件:
var updatedEvents=[{“code”:“3894”,“date”:“2020-06-01T20:00+0300”,“timestamp”:1591030800},{“code”:“1976”,“date”:“2020-06-01T20:00:00+0300”,“timestamp”:1591030800},{“code”:“0482”,“date”:“2020-06-01T20:00+0300”,“timestamp”:1591030800},{“code”:“0408”,“date”:“2020-06-01T20:00+0300”,“timestamp”{“代码”:“0482”,“日期”:“2020-06-02T20:00:00+0300”,“时间戳”:1591030800},{“代码”:“03”,“日期”:“2020-06-02T20:00:00+0300”,“时间戳”:1591030800}];
var result=updateEvents.sort((a,b)=>{
报税表(新日期(a.Date)-新日期(b.Date))| |(a.code-b.code)
});
console.log(结果);
否:在您的情况下,从
if(eventOne.date==eventTwo.date){
返回-1;
}
如果它们具有相同的日期
,则总是将eventOne
放在eventTwo
之前。但是,如果它们具有相同的日期
,则只需检查代码
;否则,按日期进行排序
它变得相当冗长,但您可以选择:
if(eventOne.dateeventTwo.date){
返回1;
}
if(eventOne.codeeventTwo.code){
返回1;
}
返回0;
但是,正如我所说的,这是非常冗长的;如果您可以使用较短的版本,那就太好了
gorak提供了有益的信息:
return(新日期(eventOne.Date)-newdate(eventTwo.Date))| |(eventOne.code-eventTwo.code);
这是因为日期和字符串可以相互减去(如果两个事件代码
的长度不同,则可能不起作用)如果它们相等,则返回0
。0
为false,因此当在or|
表达式的左侧使用它时,它的计算结果为false并返回右侧的值。但是,如果一个date
小于另一个,则返回正数或负数(不一定是-1
或1
)
如果确实要使用-1
、0
和1
,则可以执行以下操作:
const dateDiff=新日期(eventOne.Date)-新日期(eventTwo.Date);
const codeDiff=eventOne.code-eventTwo.code;
return(dateDiff/Math.abs(dateDiff))||(codeDiff/Math.abs(codeDiff))||0;
我想使用1和-1。可能在第一个if?中有最后2个if语句。但是dateDiff/Math.abs(dateDiff)给了我NaNAh yes,如果dateDiff
或codeDiff
为0,那么你会被0除掉,因此NaN
。在末尾添加|0
应该可以解决这个问题(将更新答案)。