2014-05-07 59 views
0

我想將字符串數組轉換爲javascript中的整數數組。我在這裏和其他幾個源代碼中看到了下面的解決方案,所以我將它配置爲一定是正確的,但是當我轉換到瀏覽器時會崩潰。我嘗試過使用Chromium和Firefox。 這裏是源代碼,我感興趣的是什麼原因造成這一點,有什麼可以固定:從字符串到int的數組轉換崩潰瀏覽器

var str = "1,2,3,3,4,5,6"; 
var arr1 = str.split(","); 
console.log(arr1); 
    for(var k=0; k<=arr1.length; k++) { arr1[k] = +arr1[k]; } 

回答

0

的問題是在這種表達

k<=arr1.length 

k6k++增量k和它變成7。然後k <= arr1.length是真實的,因爲arr1.length是7.下面的語句是

arr1[k] = +arr1[k]; 

它創建索引7.所以數組中的新元素的數組不斷增長無限。你應該做的是

var arr1 = "1,2,3,3,4,5,6".split(","); 
for (var k = 0; k < arr1.length; k++) { 
    arr1[k] = +arr1[k]; 
} 
console.log(arr1); 
# [ 1, 2, 3, 3, 4, 5, 6 ] 

迭代只有直到計數器小於數組的長度。否則,數組的長度存儲在臨時變量這樣

for (var k = 0, len = arr1.length; k < len; k++) { 
    arr1[k] = +arr1[k]; 
} 

你可以寫的一樣,只是

console.log("1,2,3,3,4,5,6".split(",").map(Number)); 
# [ 1, 2, 3, 3, 4, 5, 6 ] 
+0

甲因此,在實際迭代之前在變量中保存數組長度總是更好,因爲它不檢查每遍中的長度。 – VisioN

+0

你是對的。這是一個非常愚蠢的錯誤。我沒有注意到你指出了額外的「=」unitl。我也花了很多時間。 – Bloodcount

1

除了給出答案,你可能想用這個oneliner來創建數組:

var arr1 = '1,2,3,4,5,6,7'.split(',').map(function(a){return +a;}); 

MDN pageArray.map

+0

+1爲好的添加。 – Bloodcount