我在JS中有这样的数组:
var a = ["1", "2", "1_10", "1_22", "2_12", "3", "14", "1_15", "3_31", "14_25", "2_18"];
我需要对它进行排序,以便看起来像这样:
["1", "1_10", "1_15", "1_22", "2", "2_12", "2_18", "3", "3_31", "14", "14_25"];
我尝试使用像这个小提琴http://jsfiddle.net/r7vQP/中的那个函数,但我得到一个错误的答案([“1”,“14”,“14_25”,“1_10”,“1_15”,“1_22 “,”2“,”2_12“,”2_18“,”3“,”3_31“]。
答案 0 :(得分:1)
试试这个:
var b = a;
for (var i = 0; i < b.length; i++) {
b[i] = b[i].replace('_', '.');
}
b.sort(function (a, b) { return a - b });
for (var y = 0; y < b.length; y++) {
a[y] = b[y].replace('.', '_');
}
答案 1 :(得分:1)
function numericSort(a, b) {
return a - b;
}
a.map(function (e) {
return parseFloat(e.replace("_", "."));
})
.sort(numericSort)
.map(function (e) {
return e.toString().replace(".", "_");
})
答案 2 :(得分:1)
var a = ["1", "2", "1_10", "1_22", "2_12", "3", "14", "1_15", "3_31", "14_25", "2_18"]; function sortByFloat (a,b)
{
a=parseFloat (a.replace ("_",".")); b=parseFloat (b.replace ("_",".")); if (a<b) return -1; if (a>b) return 1; if (a==b) return 0; } a.sort (sortByFloat);
如果条件
,返回a-b会更快而不是三个答案 3 :(得分:0)
function to_dot(s) { return s.replace('_','.') }
function from_dot(n) { return n.replace('.','_') }
a.map(to_dot).sort(function(a,b){return a-b}).map(from_dot)
[“1”,“1_10”,“1_15”,“1_22”,“2”,“2_12”,“2_18”,“3”,“3_31”,“14”,“14_25”]