为什么循环时我的变量不可迭代
2018-11-08
1170
我尝试循环 2d 数组,但 I 变量未定义或不可迭代,为什么? 有人可以告诉我吗??
function sum (arr) {
var total = 0
for(let [a1,a2,a3] of arr){
for(let i of [a1,a2,a3]){
for(let j of i){
total += j
}
}
if(typeof a2 == "undefined" && typeof a3 == "undefined"){
a2 = [0]
a3 = [0]
}
}
};
console.log(sum([
[
[10, 10],
[15],
[1, 1]
],
[
[2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[4],
[9, 11]
],
[
[3, 5, 1],
[1, 5, 3],
[1]
],
[
[90]
]
]));
但当我对另一个 2D 数组求和时,它工作正常,如下所示:
function sum (arr) {
var total = 0
for(let [a1,a2,a3] of arr){
for(let i of [a1,a2,a3]){
for(let j of i){
total += j
}
}
}
return total
}
console.log(sum([
[
[4, 5, 6],
[9, 1, 2, 10],
[9, 4, 3]
],
[
[4, 14, 31],
[9, 10, 18, 12, 20],
[1, 4, 90]
],
[
[2, 5, 10],
[3, 4, 5],
[2, 4, 5, 10]
]
]));
我尝试对这个 2d 数组循环 3 次,第一个顶部代码是数组中的每个长度都不同 而最后一个代码是相同的,
3个回答
原因
let [a1,a2,a3] of [ [90] ])
将导致
a2
和
a3
未定义,因此在以下行中为:
for(const i of [90, undefined, undefined])
而在第二个索引处它确实为:
for(let j of undefined)
这不起作用。
Jonas Wilms
2018-11-08
您只需将检查值是否未定义并赋值为零的 if 语句移到迭代这些值的代码部分之前即可。您之所以收到此错误,是因为那里什么都没有。
function sumTwo(arr) {
var total = 0
for(let [a1,a2,a3] of arr){
if(typeof a2 == "undefined" && typeof a3 == "undefined"){
a2 = [0]
a3 = [0]
}
for(let i of [a1,a2,a3]){
for(let j of i){
total += j
}
}
}
return total
};
console.log(sumTwo([
[
[10, 10],
[15],
[1, 1]
],
[
[2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[4],
[9, 11]
],
[
[3, 5, 1],
[1, 5, 3],
[1]
],
[
[90]
]
])); //prints 237
Katie.Sun
2018-11-08
当你说
let [a1,a2,a3] of [ [90] ])
那里没有 a2 或 a3...
我的建议是在进入第一个 for 循环之前使用代码:
if(arr.length < 3){
for(let y = arr.length, y > 3, y++ ){
arr.push(0)
}
}
干杯!
Ronny McNamara
2018-11-08