Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Arrays 使用多个条件对对象数组进行排序_Arrays_Sorting - Fatal编程技术网

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
应该可以解决这个问题(将更新答案)。