javascript - 使用比较函数 js 进行排序
问题描述
我编写了以下比较函数来对对象数组进行排序。首先拥有以“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
博 Ø80/125, 15°
沼泽Ø80/125, 30°
博 Ø80/125, 45°
博 Ø80/125, 87°
Ro Ø80/125, 0,5m
Ro Ø80/125, 1,0m
Ro Ø80/125, 2,0m
格莱特
希布XXmm
我在这里做错了什么?
解决方案
比较函数应该返回
- 如果第一个元素应该先出现,则为负数
- 如果第二个元素应该先出现,则为正数
- 零,如果两个元素中的哪个先出现都无关紧要
您的函数没有考虑很多情况,例如,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;
}
}
}
推荐阅读
- android - native_app_glue with a standalone toolchain and makefile
- php - 在 docusign 中使用 jwt 身份验证进行嵌入式签名
- laravel - Laravel 5.8 Eloquent 检查记录是否存在
- apache-kafka - Kafka - 由于超时而完成回滚
- java - Apache poi 将大 excel 文件写入磁盘
- apache-spark - 从 collect_set 创建列值的唯一方式
- python - 将每个请求的json响应写入文件
- javascript - 延迟加载时未在移动设备上加载图像
- c# - 创建返回新动态匿名对象的表达式
- react-native - 如何在本机反应中禁用材质 UI 下拉菜单?