You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

循环中对数组字符串执行slice时出现undefined错误,请求调试

问题分析与解决:Cannot read property 'slice' of undefined in loop

我一眼就揪出问题啦!你遇到的错误完全是循环条件写错导致的,咱们一步步拆解来看:

错误原因

你的数组Arr长度是2,而数组的索引是从0开始的,所以有效的索引只有01。但你的循环条件写的是i <= Arr.length——当i等于2的时候(因为Arr.length是2),循环还会执行一次,这时候Arr[2]undefined,自然没法调用slice方法,直接就抛出了那个报错。而你单独测试Arr[0]的时候,访问的是有效索引,所以完全没问题。

修正后的代码

只需要把循环条件里的<=改成<,让循环只遍历到最后一个有效索引就停止:

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);

额外优化建议

现代JavaScript里更推荐用let/const代替var,避免变量提升带来的潜在问题;另外用数组的map方法可以让代码更简洁:

const 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]);
const testing = Arr[0].slice(0,-3);
console.log('slice testing :', testing);
// 用map一步完成数组转换
const chunks = Arr.map(str => str.slice(0, -3));
console.log('chunks: ', chunks);

内容的提问来源于stack exchange,提问作者lovemyjob

火山引擎 最新活动