2013-12-13 39 views
-3

這裏的數組是數組:我如何排序串號

var price = new Array("600", "250", "750", "400", "200", "500", "350", "800", "200", "700", "800", "700", "1", "800", "500", "25", "0", "1,000,000"); 

我希望能夠進行排序,並使用一個簡單的排序打印出來。

人們問,所以我想將它們轉換成數字,並從最高到最低排序。

+1

排序爲數字或排序爲字符串? –

+0

在這裏回答很好 - http://stackoverflow.com/a/1063027/448865 – cpreid

+0

這個問題不值得所有這些downvotes。JavaScript的本地排序函數不會像人們所期望的那樣對「字符串整數」數組進行排序。這不是一個微不足道的問題。 – cpreid

回答

2

你需要寫一個比較器功能比較數字

price.sort(function(a,b) { 
    return a-b; 
}); 

這將整理您的升序方式排列(b-a降序)。注意這也會修改原始數組的順序。

更改爲a.replace(/,/g,"") - b.replace(/,/g,"")忽略逗號在數量上比較

更新 如果您認爲該列表可以是你可能希望上述更改爲String(a).replace(/,/g,"") - String(b).replace(/,/g,"")避免語法錯誤數字或字符串的組合。如何處理非數字字符串取決於您現在正在製作的NaN這對於排序比較沒有用處。

+0

這很聰明,但有點誤導,我不能100%確定它可以在所有瀏覽器上運行。 – Ariel

+0

在ie6以後的每個瀏覽器中都可以工作https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#AutoCompatibilityTable – megawac

+0

這並不會讓人誤解。 '-'運算符總是將兩個操作數轉換爲數字。 – Tibos

-2

在排序陣列時發送您的自定義比較器。

price.sort(function(a, b) { 
// write your custom comparison here 
}) 
+1

我'-1''這個,因爲[Ariel's](http://stackoverflow.com/a/20571930/1454048)和[ megawac's](http://stackoverflow.com/a/20571860/1454048)的答案都包含了實際的比較語句。 – admdrew

2

如果數字始終是個整數,你可以做到以下幾點:

price.sort(function(a, b) { 
    return parseInt(a.replace(/,/g,'') - parseInt(b.replace(/,/g,''))); 
}); 

將由(從小到大)升序排列數的值原始數組排序。您可以通過交換將其取消ab

+0

如果要按整數排序,您可能需要在解析之前刪除逗號。 – Chris

+0

好點@Rfvgyhn。我更新了代碼。 – Ariel

+0

您可能想要將一個基數添加到'parseInt' – megawac

1

這裏唯一非常棘手的部分是逗號1,000,000。在嘗試比較數字之前,你需要將它們去掉。

price.sort(function(x, y) { 
    return y.replace(/,/g,'') - x.replace(/,/g,''); 
}); 

這將產生

["1,000,000", "800", "800", "800", "750", 
"700", "700", "600", "500", "500", "400", 
"350", "250", "200", "200", "25", "1", "0"] 

或可能先轉換的元素爲數字,然後對結果進行排序:

price = price.map(function(x) { return parseInt(x.replace(/,/g,''),10) }) 
      .sort(function(x, y) { return y - x; }); 

這將產生

[1000000, 800, 800, 800, 750, 700, 700, 600, 
500, 500, 400, 350, 250, 200, 200, 25, 1, 0] 

注意:ECMAScript 5中引入了,因此它在某些較舊的瀏覽器中不可用。如果這是一個問題,另一種方法是使用傳統的for循環來轉換數組。