从字符串到int的数组转换会使浏览器崩溃

时间:2014-05-07 12:59:17

标签: javascript arrays type-conversion

我正在尝试将字符串数组转换为javascript中的整数数组。我在这里和其他几个来源的线程中看到了以下解决方案,所以我说它必须是正确的,但是当我进入转换时浏览器崩溃了。我尝试过使用Chromium和Firefox。 这是源代码,我对导致这个问题以及可以解决的问题感兴趣:

 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]; }

2 个答案:

答案 0 :(得分:1)

除了给定的答案,您可能还想使用此oneliner来创建数组:

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

MDN page

答案 1 :(得分:0)

问题在于此表达式

k<=arr1.length

k6时,k++会增加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 ]