使用比较功能js排序

时间:2018-11-22 14:46:20

标签: javascript sorting

我编写了以下compare函数对对象数组进行排序。首先,所有项目均以“ Ro”开头,并按其长度进一步分组。然后,所有以“ Bo”开头的项目都将按照其角度和其余部分进一步分组。

private mycompareFunction(a: T, b: T) {
    if(a.name.startsWith("Ro") && b.name.startsWith("Ro")) {
        return a.length - b.length;
    } else if(b.name.startsWith("Ro")) {
        return 1;
    } else if(a.name.startsWith("Bo") && b.name.startsWith("Bo")) {
        return a.degrees - b.degrees;
    } else if(!a.name.startsWith("Ro") && b.name.startsWith("Bo")) {
        return 1;
    }
    return 0;
}

我得到的结果是:

  

RoØ80/ 125

     

BoØ80/ 125,15°

     

沼泽Ø80/ 125,30°

     

BoØ80/ 125,45°

     

BoØ80/ 125,87°

     

RoØ80/ 125,0.5m

     

RoØ80/ 125,1,0m

     

RoØ80/ 125,2,0m

     

光辉

     

Schieb XXmm

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

比较函数应返回

  • 如果第一个元素排在第一位,则为负数
  • 如果第二个元素排在第一位,则为正数
  • 零,如果这两个元素中的哪一个都不重要

例如,a以“ Ro”开头而b不是。

这是我要怎么做:

private mycompareFunction(a: T, b: T) {
    if (a.name.startsWith("Ro")) {
        if (b.name.startsWith("Ro") {
            return a.length - b.length;
        } else {
            return -1;
        }
    } else if (a.name.startsWith("Bo") {
        if (b.name.startsWith("Ro") {
            return 1;
        } else if (b.name.startsWith("Bo") {
            return a.degrees - b.degrees;
        } else {
            return -1;
        }
    } else {
        if (b.name.startsWith("Ro") || b.name.startsWith("Bo") {
            return 1;
        } else {
            return 0;
        }
    }
}