javascript对字符串数组进行排序

javascript对字符串数组进行排序,javascript,arrays,string,sorting,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(); con

尝试使用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"]);
words = words.sort(function(a,b){
    return a - b;
});
因此,该方法似乎将我的“10”视为“1”

如何使其将值视为10

此外,如果我通过排序功能:

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"]);
words = words.sort(function(a,b){
    return a - b;
});
结果未排序:

["4,catt", "5,battt", "3,mat"]
["2,as", "10,assssvvvvt", "6,affggg"]
我希望得到一些关于排序方法应该如何运行的澄清,以及如何使其对这些字符串进行排序!谢谢你

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

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

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

var words = strArr.map(function(str) { 
    return { len: str.length, str: str } 
});
words.sort(function(a, b) { return a.len > b.len; });
(当然,第二种方法对于示例来说是不必要的,但在其他情况下可能有用。)


排序字符串总是使用字母顺序,而不是数字顺序。想象一下0=A1=B2=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) 
});
可能重复的