我尝试循环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次,第一个最上面的代码是每个长度在数组中都不同 和最后一个代码相同,
答案 0 :(得分:4)
原因
let [a1,a2,a3] of [ [90] ])
将导致a2
和a3
未定义,因此在以下行中是:
for(const i of [90, undefined, undefined])
它在第二个索引处执行:
for(let j of undefined)
不起作用。
答案 1 :(得分:2)
您只需要移动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
答案 2 :(得分:1)
你说
let [a1,a2,a3] of [ [90] ])
那里没有a2或a3 ...
我的建议是在进入第一个for循环之前使用代码:
if(arr.length < 3){
for(let y = arr.length, y > 3, y++ ){
arr.push(0)
}
}
干杯!
答案 3 :(得分:0)
最好使用concat递归地减少数组,直到您拥有一个平面数组,然后将其减少到其总和:
def test_func():
while True:
print("Printing stuff....")
time.sleep(10)
threading.Thread(target=test_func).start()