如何按升序对这些数字字符串进行排序?

时间:2014-02-19 06:01:15

标签: javascript arrays sorting

我尝试使用.sort()对数组进行排序,但输出不是我预期的结果。

arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"]
arr.sort();

这是我的预期输出:

["0_3_6_comment", "0_5_4_comment", "0_11_6_comment"]

但我得到了这个:

["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"]

5 个答案:

答案 0 :(得分:1)

数组正在排序,虽然它按字典顺序排序,而不是数字排序,这可能不是你想要的。如果要更改sort()方法的排序方式,则需要提供自己对“排序”含义的定义。通过将比较函数作为参数传递来完成此操作。

请点击此处了解更多详情:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

答案 1 :(得分:0)

如果您想根据第二个整数值进行排序。用这个:

var arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"];
alert(arr);
arr = arr.sort(function(a,b) {
    return parseFloat(a.split("_")[1]) - parseFloat(b.split("_")[1]) 
});
alert(arr);

DEMO

答案 2 :(得分:0)

试试这个:

a.sort(function (a, b) {
    // '1_2_3_comment'.split('_')
    // gives ["1", "2", "3", "comment"]
    a = a.split('_');
    b = b.split('_');
    // if a[i] - b[i] = 0 then check next
    return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
});

阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

答案 3 :(得分:0)

Here's a JSFiddle with the answer

我建议阅读this

ary.sort(function (a, b) {
  return getSecondInteger(a) > getSecondInteger(b) ? 1 : -1;
});

function getSecondInteger (str) {
  return Number(str.split('_')[1]);
}

答案 4 :(得分:0)

试试这个

var arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment", "1_2_3_comment"];
arr.sort(function(a, b){
  a = a.match(/\d+/g);
  b = b.match(/\d+/g);
  return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
});

console.log(arr)
// result is ["0_3_6_comment", "0_5_4_comment", "0_11_6_comment", "1_2_3"] 

尝试demo