2013-10-01 59 views
2

我有值的像一個數組:整理與數字結尾的字符串,以結束數

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

我:

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

當我使用.sort()我得到下面的結果在JavaScript中對它們進行排序知道這是因爲項目是字符串,這是什麼sort()旨在做,但我怎麼可以將它們分類到以下?

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

感謝,

+3

最簡單的辦法是做:'item01','item02'等。 .. – nhgrif

+0

是的,但有可能這些項目可能在數百或更多,所以有一個前綴爲0是不是一個完整的方式 –

回答

5

您可以定義自己的.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/

+0

謝謝,很好,很簡單,希望我想到它:p –

0

排序需要一個比較函數並會用它對列表進行排序。在調用排序之後,列表將被排序。

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)); }); 
0

使用後:

var a = new Array(); 
a = ['item1', 'item3', 'item2', 'item4', 'item5', 'item8', 'item6', 'item9', 'item10', 'item7', 'item11']; 
var temparray = new Array(); 
for (var i = 0; i < a.length; i++) { 
    var substr = (a[i]).substring(4); 
    temparray.push(parseInt(substr)); 
} 
temparray.sort(function(a,b){return a-b}); 
a=temparray; 
console.log(a) 
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; 
});