如何在javascript中对整数组合数组进行排序

时间:2014-02-11 22:50:27

标签: javascript

我在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“]。

4 个答案:

答案 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”]