4

次のような値の配列があります。

item1, item3, item2, item4, item5, item8, item6, item9, item10, item7, item11

を使用してJavaScriptでそれらをソートすると.sort()、以下の結果が得られます。

item1, item10, item11, item2, item3, item4, item5, item6, item7, item8, item9

これは、アイテムが文字列であり、これsort()が設計されているためであることはわかっていますが、どうすればそれらを次のように並べ替えることができますか?

item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11

ありがとう、

4

4 に答える 4

6

.sort独自のコールバックを定義できます。実際、数字をソートするにはそうする必要があります。ただし、あなたのケースは少し異なります。

.sort(function (a, b) {
    return (+a.replace("item", "")) - (+b.replace("item", ""));
});

デモ: http://jsfiddle.net/Hbs8g/

item一貫性がない場合は.split(/(\d+)/)[1]、単語部分に数字が含まれていないと仮定して数字部分を取得できます: http://jsfiddle.net/Hbs8g/1/

于 2013-10-01T14:13:00.860 に答える
0

Sort は比較関数を取り、それを使用してリストをソートします。sort が呼び出された後、リストはソートされます。

z = ["item1", "item3", "item2", "item4", "item5", "item8", "item6", "item9", "item10", "item7", "item11"];    
z.sort(function(a, b) { return parseInt(a.substring(4)) - parseInt(b.substring(4)); });
于 2013-10-01T14:16:45.133 に答える
0

あなたに役立つ場合は、これを試してください

arr.sort(function(a, b) {
a = a.replace("item", "");
b = b.replace("item", "");
if (a > b)
   return 1;
else if (a < b)
   return -1;
else
   return 0;
});
于 2013-10-01T14:30:11.807 に答える