3

配列をソートする方法

var arr = new Array("word_12", "word_59", "word_17");

私が得るように

["word_12", "word_17", "word_59"]

ありがとう!

4

4 に答える 4

4

_ で文字列を分割し、2 番目の部分を数値の並べ替え値として使用する並べ替えメソッドを作成する必要があります (好きなように作成できます)。

​    function sortOnNum(a,b){
         //you'll probably want to add a test to make sure the values have a "_" in them and that the second part IS a number, and strip leading zeros, if these are possible
         return (a.split("_")[1] * 1 > b.split("_")[1] * 1)? 1:-1;// I assume the == case is irrelevant, if not, modify the method to return 0 for ==
    }

    var ar = new Array ("foo_1", "foo_19", "foo_3", "foo_1002");

ar.sort(sortOnNum); //here you pass in your sorting function and it will use the values in the array against the arguments a and b in the function above

alert(ar); // this alerts "foo_1,foo_3,foo_19,foo_1002"

ここにフィドルがあります: http://jsfiddle.net/eUvbx/1/

于 2012-06-06T20:09:51.993 に答える
2

以下は、番号が常に文字列の最後にあると仮定しています。これが機能するさまざまな形式を示すために、いくつかの例を配列に追加したことに注意してください。

var numbers = ["word_12", "word_59", "word_17", "word23", "28", "I am 29"];

numbers.sort(function(a,b){
    return a.match(/\d+$/) - b.match(/\d+$/);
});

結果は次のとおりです。

["word_12", "word_17", "word23", "28", "I am 29", "word_59"]
于 2012-06-06T20:20:32.570 に答える
0

単語に数字とアンダースコアが含まれている場合に備えて (これらは、JavaScript の単語定義による非常に正当な単語文字です。

arr.sort(function(_1, _2)
{
    return +_1.substr(_1.lastIndexOf("_")+1)-_2.substr(_2.lastIndexOf("_")+1);
});
于 2012-06-06T20:27:47.173 に答える