【问题标题】:Array conversion from string to int crashes the browser从字符串到整数的数组转换会使浏览器崩溃
【发布时间】:2014-05-07 12:59:17
【问题描述】:

我正在尝试将字符串数组转换为 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]; }

【问题讨论】:

    标签: javascript arrays type-conversion


    【解决方案1】:

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

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

    MDN pageArray.map

    【讨论】:

      【解决方案2】:

      问题出在这个表达式中

      k<=arr1.length
      

      k6 时,k++ 递增k 并变为7。然后k &lt;= 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 ]
      

      【讨论】:

      • 另外,在实际迭代之前最好将数组长度保存在变量中,以免每次传递都检查长度。
      • 你是对的。这是一个非常愚蠢的错误。我没有注意到你指出的额外的“=”单元。我也花了很多时间寻找。
      猜你喜欢
      • 2016-11-03
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多