2013-08-03 59 views
0

任何人都可以請告訴我如何使用javascript對以下數組值進行排序。Java腳本排序的數組值包括逗號和句點

var cols = new Array(); 
cols[0] = 13,000,000; 
cols[1] = -20.45; 
cols[2] = 0.0; 
cols[3] = 10,000; 
cols[4] = 750.00 
cols[5] = 41.00; 

我曾嘗試以下兩種方法排序

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

結果就像下面的一些事情。

cols[0] = -20.45; 
cols[1] = 0.0; 
cols[2] = 10,000; 
cols[3] = 13,000,000; 
cols[4] = 41.00; 
cols[5] = 750.00 

`

+3

'cols [0] = 13,000,000;'這不會給你你想要的數字。他們真的是字符串嗎? –

+0

13,000,000和10,000將被設置爲13和10. – CBIII

+0

實際上是'0'和'0'。 –

回答

1

我建議你帶逗號,使他們可以被轉換爲使用+號碼。然後,您可以使用這些數字版本進行排序功能比較。

http://jsfiddle.net/EuQTX/1/

var cols = new Array(); 
cols[0] = '13,000,000'; 
cols[1] = '-20.45'; 
cols[2] = '0.0'; 
cols[3] = '10,000'; 
cols[4] = '750.00'; 
cols[5] = '41.00'; 

//Removing the commas. You can add more characters to remove to the set 
var pattern = /[,]/g 

cols.sort(function (a,b){ 
    //remove unwanted characters so they can be converted to numbers 
    a = +a.replace(pattern,''); 
    b = +b.replace(pattern,''); 
    //use the numeric versions to sort the string versions 
    return a-b; 
}); 

console.log(cols); 
//["-20.45", "0.0", "41.00", "750.00", "10,000", "13,000,000"] 

只是一個側面說明,你應該用文字符號,而不是聲明數組:

var cols = ["13,000,000", "-20.45", "0.0", "10,000", "750.00", "41.00"] 
+0

我正在使用innerhtml從html表中讀取cols數組中的值,所以col數組中的值每次都會更改,因此可能無法將其置於固定的字符串格式中。此外,在刪除逗號和排序它我可以再次顯示數值的格式,再次像在一個HTML表中的13,000,000 ... – user2573586

+0

@ user2573586轉換爲數字不會影響cols數組的值。它只發生在排序功能中。你可以檢查演示。 – Joseph

+0

上面的一個工作。 – user2573586

0

試試這個:

var cols = ['13,000,000', '-20.45', '0.0', '10,000', '750.00', '41.00']; 
cols.sort(function(a,b){ 
    var lhs = parseInt(a.replace(/,/g,"")); 
    var rhs = parseInt(b.replace(/,/g,"")); 
    return(lhs - rhs); 
}) 
+1

需要考慮的要點:這些值有小數,'parseInt'在轉換期間修剪小數。接下來,'parseInt'應該總是被提供一個基數來安全轉換。否則,JS會將您的輸入視爲八進制數AFAIK而不是十進制數。 – Joseph

+0

@JosephtheDreamer:如果在有效的八進制整數之前有一個前導'0',它只會認爲它是一個八進制數。例如'015'是八進制,'018'不是。 ...我認爲這可能在新的瀏覽器中發生了變化。 –

+0

@CrazyTrain,但是一個錯位的'0'會混淆該值,因此會導致順序。最好是安全的。 – Joseph

0

http://jsfiddle.net/M5LFg/4/

function sortBy(array, by) { 
    return array 
    .map(function (_) { return [ _, by(_) ]; }) 
    .sort(function (a, b) { return a[1] - b[1]; }) 
    .map(function (_) { return [ _[0] ]; }); 
} 

sortBy(
    '13,000,000 -20.45 0.0 10,000 750.00 41.00'.split(' '), 
    function (_) { return parseInt(_.replace(/,/g, ''), 10); } 
) 
相關問題