這裏的數組是數組:我如何排序串號
var price = new Array("600", "250", "750", "400", "200", "500", "350", "800", "200", "700", "800", "700", "1", "800", "500", "25", "0", "1,000,000");
我希望能夠進行排序,並使用一個簡單的排序打印出來。
人們問,所以我想將它們轉換成數字,並從最高到最低排序。
這裏的數組是數組:我如何排序串號
var price = new Array("600", "250", "750", "400", "200", "500", "350", "800", "200", "700", "800", "700", "1", "800", "500", "25", "0", "1,000,000");
我希望能夠進行排序,並使用一個簡單的排序打印出來。
人們問,所以我想將它們轉換成數字,並從最高到最低排序。
你需要寫一個比較器功能比較數字
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
這對於排序比較沒有用處。
可以使用通常的排序功能: http://www.w3schools.com/jsref/jsref_sort.asp
您也可以解析字符串的數字與「parseInt函數」或「parseFloat」。
在排序陣列時發送您的自定義比較器。
price.sort(function(a, b) {
// write your custom comparison here
})
我'-1''這個,因爲[Ariel's](http://stackoverflow.com/a/20571930/1454048)和[ megawac's](http://stackoverflow.com/a/20571860/1454048)的答案都包含了實際的比較語句。 – admdrew
這裏唯一非常棘手的部分是逗號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循環來轉換數組。
排序爲數字或排序爲字符串? –
在這裏回答很好 - http://stackoverflow.com/a/1063027/448865 – cpreid
這個問題不值得所有這些downvotes。JavaScript的本地排序函數不會像人們所期望的那樣對「字符串整數」數組進行排序。這不是一個微不足道的問題。 – cpreid