从字符串到整型的数组转换会导致浏览器崩溃

Array conversion from string to int crashes the browser

本文关键字:浏览器 崩溃 转换 数组 字符串 整型      更新时间:2023-09-26

我试图将字符串数组转换为javascript中的整数数组。我在这里的几个线程和其他几个来源中看到了以下解决方案,所以我认为它必须是正确的,但是当我转换到浏览器崩溃时。我尝试过chrome和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]; }

除了给定的答案,您可能还想使用这个在线程序来创建数组:

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

MDN page for Array.map

问题出在这个表达式

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 ]