自定义array.sort函数,包含多个条件。布尔

时间:2017-02-13 14:47:32

标签: 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-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}以上的if / self(除了以前的if之外),但是它没有用......

如何扩展排序以包含BOOL道具?

2 个答案:

答案 0 :(得分:2)

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



var data = [{ id: 0, flight: true, priority: 1, shooterid: 2, targetid: 1 }, { id: 1, flight: 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: 1 }, { id: 4, flight: true, priority: 1, shooterid: 1, targetid: 2 }];

data.sort(function (a, b) {
    return (
        a.flight - b.flight ||
        a.priority - b.priority ||
        a.shooterid - b.shooterid ||
        a.targetid - b.targetid
    );
});

console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

第一个if应为:

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

在减法中,布尔true将被视为1false将被视为0。这意味着false个会在true之前排序,正如您所说的那样。