我正在尝试对数组进行排序,如下所示:
var arr = ["a", "c", "1", "e", "-", "4", "p", "$", "~", "6", "33", "h"];
我想要的订单应该是:
var arr = ["a", "c", "e", "h", "p", "-", "~", "$", "1", "33", "4", "6"];
我已经有了一个可行的解决方案,但我不确定这是否是最佳(最快)的方法。
arr.sort(function(a, b) {
return a.localeCompare(b);
});
for (var i = 0; i < arrLength; i++) {
if (arr[i].localeCompare("a") >= 0) {
if (i > 0) {
Array.prototype.push.apply(arr, arr.splice(0, i));
}
break;
}
}
答案 0 :(得分:2)
是的,您应该在比较功能中包含逻辑。这比首先按一个标准排序然后通过其他一些标准转移部分数组更容易理解,并且在其他情况下可以重复使用。
你想要
arr.sort(function(a, b) {
var aIsAlphabetical = a.localeCompare("a") >= 0,
bIsAlphabetical = b.localeCompare("a") >= 0;
if (!aIsAlphabetical && bIsAlphabetical)
return 1;
if (aIsAlphabetical && !bIsAlphabetical)
return -1;
return a.localeCompare(b);
});
或,缩写:
arr.sort(function(a, b) {
return (b.localeCompare("a")>=0)-(a.localeCompare("a")>=0) || a.localeCompare(b);
});
如果您正在寻找速度最快的代码,则应在目标系统上设置一个基准测试数据库。