Javascript 具有多个条件(包括布尔值)的自定义array.sort函数

Javascript 具有多个条件(包括布尔值)的自定义array.sort函数,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个对象数组,我想按几个属性排序 我将展示阵列的单个元素 var ele = { id: INT, various, priority: INT 1 - 10, shooterid: INT various, targetid: INT various, flight: BOOL } 我想根据一些标准对阵列进行排序,我可以使用 if (a.priority != b-priority){ return a-priority - b-priorit

我有一个对象数组,我想按几个属性排序

我将展示阵列的单个元素

var ele = {
    id: INT, various,
    priority: INT 1 - 10,
    shooterid: INT various,
    targetid: INT various,
    flight: BOOL
}
我想根据一些标准对阵列进行排序,我可以使用

if (a.priority != b-priority){
  return a-priority - b-priority;
else if a.shooterid != b.shooterid){
  return a.shooterid - b. shooterid
}
else return a.targetid - b.targetid
但是,我也希望按航班排序,并且我希望所有
flight=true
的元素在添加到上述排序中后排序

我尝试了
if(a.flight){return-1/0/1}
a在上面的if/self的最上面(将else添加到以前的if中),但是没有成功


如何扩展排序以包含布尔属性?

如果的话,第一个
应该是:

if (a.flight != b.flight)
  return a.flight - b.flight;

在减法中,布尔值
true
将被视为
1
false
将被视为
0
。这意味着,
false
的排序将先于
true
的排序,正如您所说。

您可以将所有排序条件与逻辑或
|
相结合,甚至是布尔值

var data=[{id:0,flight:true,priority:1,shooterid:2,targetid:1},{id:true,priority:2,shooterid:2,targetid:3},{id:2,flight:false,priority:1,shooterid:1,targetid:2},{id:3,flight:false,priority:2,shooterid:1,targetid:4,flight:true,priority:1,shooterid:1,targetid:2}];
数据排序(函数(a,b){
返回(
a、 航班-b航班||
a、 优先权||
a、 射手座-b.射手座||
a、 targetid-b.targetid
);
});
控制台日志(数据)

。作为控制台包装{max height:100%!important;top:0;}
请添加一些小样本数据。只需将
航班
比较作为您要做的第一件事。如果
航班
属性不同,则没有其他问题。你说“没有”起作用,但它会起作用;描述出什么地方出了问题,否则没有人能真正帮助你。你真的尝试过代码
返回-1/0/1
?这就是负的无穷大(负一除以零除以一)——这就是你想要的吗?或者你的意思是你分别尝试了这些值,但没有任何效果?你仍然需要像其他任何东西一样比较
航班
,因为如果你在
航班
为真时无条件返回任何值,那么你就无法在包含
航班
的元素列表中进行比较。谢谢你的回答。我决定批准另一个答案,因为它用| |而不是if/else看起来很干净。不过,我很感谢你对原因的解释。