【发布时间】:2017-09-11 21:27:27
【问题描述】:
你能解释一下为什么我会得到不同的结果吗?
这是完成的代码和我想要的结果:
function largest_of_arrs(arr){
var largest_arr = [];
var holder;
var max = 1;
for(var i = 0; i < arr.length; i++){
var sum = 0;
for(var j = 0; j < arr[i].length; j++){
sum += arr[i][j];
if(sum > max) {
max = sum;
largest_arr = arr[i];
}
}
}
return largest_arr;
}
var array_1 = [[1,2,3,4,5],[1,2,2,3,1],[11,12,23,45,88],[20,20,5,5,1]];
largest_of_arrs(array_1);
这给了我想要的结果:[11,12,23,45,88]
但是当我像这样在 for 循环之外声明 sum 变量时
function largest_of_arrs(arr){
var largest_arr = [];
var holder;
var max = 1;
var sum = 0;
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr[i].length; j++){
sum += arr[i][j];
if(sum > max) {
max = sum;
largest_arr = arr[i];
}
}
}
return largest_arr;
}
var array_1 = [[1,2,3,4,5],[1,2,2,3,1],[11,12,23,45,88],[20,20,5,5,1]];
largest_of_arrs(array_1);
结果是:[20,20,5,5,1]
您能否向我解释一下为什么?以及如何在此处设置范围? 如果可能,请提供图片(图形)..
【问题讨论】:
-
因为在您的真实情况下,您在第一次迭代的开头设置了
sum=0。所以成像总和在每个 i 处为 0,而在后者中,它只是累积;) -
@Levo96 搜索你的逻辑失败就像在数学中 3+2*5 和 (3+2)*5 不一样
标签: javascript arrays for-loop scope