JavaScript嵌套数组处理:解决嵌套循环输出undefined问题
解决嵌套数组遍历输出undefined的问题
问题重现
你的代码需求是打印数组中的嵌套数组元素,但当前实现会在第一个嵌套数组遍历结束后输出undefined:
let newArray = ["Ameen", "John", ["Working", "Studying"], [10, 100, 30, 40]]; for (let i = 0; i < newArray.length; i++) { // `Nested For Loop To Print The Nested Arrays` for (let j = 0; j <= i; j++) { if (Array.isArray(newArray[i])) { console.log(`Nested Array ${newArray[i][j]}`); } } } console.log(`Whole Array: ${newArray}`);
问题根源正如你所说:当父循环i=2时,嵌套循环的条件j<=i会让j尝试访问索引2,但第一个嵌套数组["Working", "Studying"]只有2个元素(索引0、1),访问不存在的索引自然返回undefined。
修正方案
核心是让嵌套循环的遍历范围基于当前嵌套数组的实际长度,而不是父循环的索引i,同时优化逻辑,避免对非数组元素执行无用循环:
修正后的代码
let newArray = ["Ameen", "John", ["Working", "Studying"], [10, 100, 30, 40]]; for (let i = 0; i < newArray.length; i++) { // 先判断当前元素是否为嵌套数组,再启动内部循环 if (Array.isArray(newArray[i])) { // 内部循环仅遍历当前嵌套数组的有效索引 for (let j = 0; j < newArray[i].length; j++) { console.log(`Nested Array ${newArray[i][j]}`); } } } console.log(`Whole Array: ${newArray}`);
可选简化写法
如果想让代码更简洁易读,可以使用forEach遍历:
let newArray = ["Ameen", "John", ["Working", "Studying"], [10, 100, 30, 40]]; newArray.forEach(item => { if (Array.isArray(item)) { item.forEach(elem => console.log(`Nested Array ${elem}`)); } }); console.log(`Whole Array: ${newArray}`);
内容的提问来源于stack exchange,提问作者Ameen Shamsan
相关产品推荐
相关产品推荐

