2013-06-26 84 views
0

我有一個字符串數組,我需要將其轉換爲小數數組。字符串數組是這樣的:爲什麼JavaScript parseFloat在for循環中附加額外的值?

var array = [" 169.70", " 161.84", " 162.16", " 176.06", " 169.72", " 170.77", " 172.74", " 175.73", " 0.00", " 0.00", " 0.00", " 0.00"] 

我創建了一個簡短的函數解析該是這樣的每個數組元素:

function parseFloatArray(array) { 
    var parsedArray = []; 
     for (var i = 0; i < array.length ; i++) { 
      parsedArray[i] = parseFloat(array[i]); 
      parsedArray.push(parsedArray[i]);   
      console.log(parsedArray[i]); 
     }; 
    return parsedArray; 
} 

記錄array.length給我12的值登錄for循環還會返回12個單獨的值。然而,執行console.log(parsedArray)給我用13的長度以下的陣列(注意尾隨零):

[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0, 0] 

我如何能改善這一功能,任何想法爲什麼它會追加一個零,儘管所有日誌顯示12個值?

+1

嘗試'array.map(parseFloat)' ;) – georg

+0

你正在分配*和*推送?僅供參考,'array.map(parseFloat)'更乾淨。編輯:...像thg435說。 :D –

+0

哦,新手爲自己創造額外的工作。感謝array.map(parseFloat)提示。精美的作品。 – thefreeline

回答

2

它可能是一個很好的使用數組方法映射,它返回從函數(例如,parseFloat)返回的每個項目的價值的一個新的數組:

var array= [" 169.70", " 161.84", " 162.16", " 176.06", " 169.72", 
" 170.77", " 172.74", " 175.73", " 0.00", " 0.00", " 0.00", " 0.00"]; 

var parsedArray= array.map(parseFloat); 
>>>value: (Array)  
[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0]; 

如果必須支持IE < 9,你可以提供一個子爲MAP-

Array.prototype.map= Array.prototype.map || function(fun, scope){ 
    var T= this, L= T.length, A= Array(L), i= 0; 
    if(typeof fun== 'function'){ 
     while(i<L){ 
      if(i in T){ 
       A[i]= fun.call(scope, T[i], i, T); 
      } 
      ++i; 
     } 
     return A; 
    } 
} 
0

就把它們一次:

function parseFloatArray(array) { 
    var parsedArray = []; 
    for (var i = 0; i < array.length; i++) { 
     parsedArray.push(parseFloat(array[i])); 
    } 
    return parsedArray; 
} 
+0

我接受了這個答案,因爲它確實解決了這個問題。我喜歡評論中的.map(parseFloat)建議。 – thefreeline

相關問題