我有以下代码。我只需要打印任何
Nested Arrays
.
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}`);
工作正常,但是,这里的问题是
nested loop "j"
在第一个嵌套数组["Working", "Studying"]
.的最后一个元素之后打印“未定义”
我明白了,因为
"i"
的索引增加到"2"
,而第一个嵌套数组["Working", "Studying"]
只有2个元素,这意味着两个indexes (0,1)
。因此,“j”在第一个嵌套数组中找不到带有index of "2"
的元素。
问题是,如何使嵌套循环“j”不打印由父循环索引“i”引起的“未定义”元素?
在我捏了捏脑袋之后。我通过添加另一个条件找到了解决方案。即If the
newArray[i]
is an Array
and If (this is added condition) newArray[i][j] !== undefined
如下
for (let i = 0; i < newArray.length; i++) {
for (let j = 0; j <= i; j++) {
if (Array.isArray(newArray[i]) && newArray[i][j] !== undefined) {
console.log(`Nested Array ${newArray[i][j]}`);
}
}
}
如我所愿。但是,我想知道是否有另一种方法可以实现这一目标。 感谢您的合作。
立即想到的一个解决方案可以防止第二次不必要的循环:
for (let i = 0; i < newArray.length; ++i) {
if(Array.isArray(newArray[i])) {
for (let j = 0; j < newArray[i].length; ++j) {
if (newArray[i][j] != undefined) {
console.log(`Nested Array ${newArray[i][j]}`);
}
}
}
}
console.log(`Whole Array: ${newArray}`);
我认为可以通过执行以下操作来简化
const nestedArrayItems = newArray.filter(item => Array.isArray(item)).flat()
nestedArrays.forEach(nestedArray => console.log(nestedArray))