【问题标题】:Slice is not definied (when slicing strings in Array in a loop)切片未定义(在循环中对 Array 中的字符串进行切片时)
【发布时间】:2018-05-16 07:59:36
【问题描述】:

我偶然发现了一些我无法理解的东西。在循环中对 Array 中的字符串进行切片会产生 "Cannot read property 'slice' of undefined" 错误。当我自己切片任何 Array 字符串(没有循环)时,它工作正常。请帮我调试代码。

var Arr = ['2018-08-03 11:00:00', '2017-07-03 03:30:00'];
console.log('length of Arr: ', Arr.length);
console.log('string testing: ', Arr[0]);

var testing = Arr[0].slice(0,-3);
console.log('slice testing :', testing);

var chunks = [];

for (var i = 0; i<=Arr.length; i++) {

  chunks.push(Arr[i].slice(0,-3));

};

console.log('chunks: ', chunks);

【问题讨论】:

  • 试试for (var i = 0; i&lt;Arr.length; i++) =。
  • 你循环播放长度。
  • @Eddie 谢谢!但它应该循环一次?因为 0 是
  • 使用&lt;,如果数组中有一个成员,它将循环一次,如果有两个成员,则循环两次等等......看看for是如何工作的。

标签: javascript arrays slice


【解决方案1】:

您在不正确的for 循环条件中使用了i&lt;=Arr.length。这是不正确的,因为Arr 的长度是2,所以当i 的值是2 时,当我们有i&lt;=Arr.length 时,在for 循环中为真。因此,当代码 Arr[i]Arr[2] 一起执行时,它在第三个索引中找不到任何元素(因为 Arr[2] 表示第三个索引中的项目),所以它给出了 undefined 错误:

var Arr = ['2018-08-03 11:00:00', '2017-07-03 03:30:00'];
console.log('length of Arr: ', Arr.length);
console.log('string testing: ', Arr[0]);

var testing = Arr[0].slice(0,-3);
console.log('slice testing :', testing);

var chunks = [];

for (var i = 0; i<Arr.length; i++) {

  chunks.push(Arr[i].slice(0,-3));

};

console.log('chunks: ', chunks);

【讨论】:

    【解决方案2】:

    您应该删除=,正如大家在您的行中建议的那样 - for (var i = 0; i &lt;= arr.length; i++)。否则,i 在最后一次迭代中获得一个等于 arr.length(即 2)的值,该数组的索引不存在!包含 2 个元素的数组的索引为 0 和 1。类似地,包含 3 个元素的数组的索引为 0、1 和 2。希望您理解这一点。

    除此之外,为了避免类似的事情,最安全的迭代方法 数组如下-

    arr.forEach(function (item) {
       chunks.push(item.slice(0, -3));
    });
    

    这也使您的代码更具可读性。

    【讨论】:

      【解决方案3】:

      你的循环应该从 0 开始到 Arr.length

      var Arr = ['2018-08-03 11:00:00', '2017-07-03 03:30:00'];
      console.log('length of Arr: ', Arr.length);
      console.log('string testing: ', Arr[0]);
      
      var testing = Arr[0].slice(0,-3);
      console.log('slice testing :', testing);
      
      var chunks = [];
      
      for (var i = 0; i<Arr.length; i++) {
      
        chunks.push(Arr[i].slice(0,-3));
      
      };
      
      console.log('chunks: ', chunks);

      【讨论】:

        猜你喜欢
        • 2015-05-21
        • 2012-07-13
        • 2014-07-08
        • 1970-01-01
        • 2012-11-20
        • 2011-12-03
        • 2020-11-27
        • 2018-08-13
        • 2017-04-21
        相关资源
        最近更新 更多