-2

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 メソッドがどのように動作することを期待すべきか、およびこれらの文字列をソートする方法について明確にしたいと思います! ありがとうございました

4

2 に答える 2

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) 
});
于 2013-10-11T17:46:56.077 に答える