javascript排序字符串数组

时间:2013-10-11 17:37:10

标签: javascript arrays string sorting

我尝试使用sort方法对字符串数组进行排序似乎不一致,无论是否传递sort()函数:

function sortThese(strArr) { 

    var words = [];
    for (var i = 0; i < strArr.length; i++) {
        words.push(String(strArr[i].length + "," + strArr[i]));
    }

    words = words.sort();
    console.log(words);
}

sortThese(["battt","catt","mat"]);
sortThese(["as","assssvvvvt","affggg"]);

在这种情况下,我的结果是:

["3,mat", "4,catt", "5,battt"]
["10,assssvvvvt", "2,as", "6,affggg"]

因此看起来该方法将我的“10”视为“1”。

如何让它看到值为10?

另外,如果我通过排序这个功能:

words = words.sort(function(a,b){
    return a - b;
});

结果未排序:

["4,catt", "5,battt", "3,mat"]
["2,as", "10,assssvvvvt", "6,affggg"]

我希望能够澄清一下我应该如何期望sort方法的行为,以及如何让它对这些字符串进行排序!谢谢

2 个答案:

答案 0 :(得分:1)

“10”出现在“3”之前,因为你已经把它变成了一个字符串(即“1”出现在“3”之前)。如果要按长度排序,可以使用sort函数来比较长度:

words.sort(function(a, b) { return a.length > b.length; });

Fiddle

您还可以创建嵌套对象数组,以便在每个项目中保存数字和字符串:

var words = strArr.map(function(str) { 
    return { len: str.length, str: str } 
});
words.sort(function(a, b) { return a.len > b.len; });

(当然,第二种方法对于示例案例是不必要的,但在其他情况下可能会有用。)

Fiddle

答案 1 :(得分:0)

排序字符串始终使用字母顺序,而不是数字。试想一下0 = A 1 = B 2 = C,依此类推。字母不作为数字连接,因此以1(各自的B)开头的所有内容将在2(相应的C)之前排序。这就是你获得10,2,6的原因。对于10,只有1计数。

使用自定义排序功能是实现此目的的好方法。但你不能减去字符串。之前提取整数并在之后进行比较:

words = words.sort(function(a,b){
    //parseInt will read only the first numbers and discard the letters after this
    return parseInt(a) - parseInt(b) 
});