For循环不遍历数组(JavaScript)

For loop not iterating through array (JavaScript)

本文关键字:JavaScript 数组 遍历 循环 For      更新时间:2023-09-26

我用for循环迭代数组,将数组中的值相加,但它只返回第一个值。我收到了2号警报,而不是预期的2014年。

我做错了什么?

在此处输入链接描述

JavaScript

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];
            return answer;
        }
    }
    var response = arraySum(array);
    alert(response);
});

因为您将return语句放在循环中,所以当它第一次命中此return语句时,它将以值answer退出函数(即2)。你真正想要的是:

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (var i = 0; i < array.length; i++) {
            answer += array[i];
            // DON'T return here
        }
        // Return HERE
        return answer;
    }
    var response = arraySum(array);
    alert(response);
});

如果这没有意义,可以这样想:

你想执行一个动作八次,当它完成后,你想做一些有结果的事情。在这种情况下,你要加八次数字,然后提醒总数。不幸的是,如果你在循环中说return,它会在每一个操作(添加)之后尝试"做点什么"(return)。因为它试图在每个操作之后返回,所以循环实际上在第一个操作之后中断,并且永远无法添加最后七个数字。如果你想观察这个过程的进展,你实际上可以把警报放在你的return语句曾经所在的地方,并观察它在每次迭代后被击中(从而收到八个警报)。

顺便说一句,您还应该用var i定义"i",因为您可以通过忘记"var"来处理范围。我在上面的代码中也修正了这个错误。感谢Ryan引起大家的注意。

$(document).ready(function() {
var array = [2, 2, 10, 0, 50, 1900, 25, 25];
function arraySum(arr) {
    var answer = 0;
    for (i = 0; i < array.length; i++) {
        answer += array[i];           
    }
    return answer;
}
var response = arraySum(array);
alert(response);
});

您正在返回循环内部的值。当循环第一次执行时,它将第一个数组值添加到answer,然后返回answer。此时,您的函数已完成运行。

如果您移动返回答案;在循环下面,这将按预期工作。

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];            
        }
        return answer;
    }
    var response = arraySum(array);
    alert(response);
});

不确定这是否是某种测试:)

FOR循环中有一个return语句。因此循环返回计算(0+array[0])后的结果

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];
            //return answer; remove this line
        }
    }
    var response = arraySum(array);
    alert(response);
});

您可以使用以下内容:

$.each(array, function(index, value) {
    answer += value;
});
return answer;

因为jquery有一个内置的foreach函数。

除了大家已经说过的,当您将return移到循环之外时,虽然函数仍然可以正常运行,但我会更改在函数和循环中调用数组的方式。

您的数组名为"array"。您在函数参数中将其调用为"arr",因此我认为在函数中的后续for循环中,您也应该将数组调用标记为"arr"。无论哪种方式,我都能在2014年得到正确的答案,但我认为在整个执行过程中保持函数数组变量的标题不变是最好的选择。

$(document).ready(function() {
var array = [2, 2, 10, 0, 50, 1900, 25, 25];
function arraySum(arr) {
    var answer = 0;
    for (i = 0; i < arr.length; i++) {
        answer += arr[i];
    }
    return answer;
}
var response = arraySum(array);
console.log(response);
});