在开始之前,我已经看了很多帖子,但是我不知道如何解决这个问题。我有一个要按以下条件排序的数组,我想要与顶部的tablePrefix匹配的任何数组项。当数组中的项目数为10或少于10时,它的作用就像一个超级按钮,但当数组为11或更多时,该函数将开始给出错误的排序顺序。
var tablePrefix = 'es_officer';
columns = [
"es_officer_id", // 0
"es_officer_name", // 1
"es_officer_fname", // 2
"es_officer_dob", // 3
"es_officer_apply_status", // 4
"es_employment_type_id", // 5
"es_employment_type_name", // 6
"es_designation_id", // 7
"es_designation_title", // 8
"es_service_type_id", // 9
"es_service_type_name", // 10
"es_bps_id", // 11
"es_bps_title" // 12
];
columns.sort((a, b) => a.indexOf(tablePrefix) ? a.localeCompare(b) : -1);
console.log(columns);
数组中有12个项目的结果
[
"es_officer_id",
"es_officer_fname",
"es_officer_dob",
"es_officer_apply_status",
"es_bps_id",
"es_officer_name", // Unordered result, this should be above es_bps_id
"es_bps_title",
"es_designation_id",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name",
"es_service_type_id",
"es_service_type_name"
]
但是如果删除任何两个项目并将columns数组中的项目数减少到10个,则效果很好。例如删除9和10。
数组中有10个项目的结果
[
"es_officer_id",
"es_officer_fname",
"es_officer_dob",
"es_officer_apply_status",
"es_officer_name", // In right order
"es_bps_id",
"es_bps_title",
"es_designation_id",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name"
]
任何人 ??帮助将不胜感激。
排序算法假定总的一致顺序。这意味着a < b
和都不可能同时存在b < a
,但这就是当您比较两个与前缀匹配的元素时会发生的情况,因为-1
即使交换这些元素,比较函数也会返回。
如果您违反了比较功能的算法要求,那么任何事情都可能发生(例如,冒泡排序算法将永远循环)。显然,ECMA标准更为宽容,只是谈论了实现定义的任意排序顺序:在标准实现中不会发生挂起,崩溃或元素重复/删除。
还要注意,如果a
匹配,则还需要b
在使用之前检查是否也匹配,localCompare
如果希望所有匹配都出现之前。
function comp(a, b) {
if (a.indexOf(prefix)) {
if (b.indexOf(prefix)) {
return a.localCompare(b);
} else {
return 1;
}
} else {
if (b.indexOf(prefix)) {
return -1;
} else {
return 0; // All prefixed are considered equal
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句