for循环不迭代数组(JavaScript)

时间:2015-10-30 17:54:51

标签: javascript arrays function for-loop

我通过使用for循环迭代数组来将数组中的值相加,但它只返回第一个值。我被提醒2而不是像预期的那样2014年。

我做错了什么?

enter link description here

的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);
});

6 个答案:

答案 0 :(得分:3)

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

    <table class="table table-responsive table-hover">
  <thead>
        <tr><th>Column</th><th>Column</th><th>Column</th><th>Column</th></tr>
    </thead>
    <tbody>
        <tr class="clickable" data-toggle="collapse" id="row1" data-target=".row1">
            <td><i class="glyphicon glyphicon-plus"></i></td>
            <td>data</td>
            <td>data</td>  
            <td>data</td>
        </tr>
        <tr class="collapse row1">
            <td>- child row</td>
            <td>data</td>
            <td>data</td>  
            <td>data</td>
        </tr>
        <tr class="collapse row1">
            <td>- child row</td>
            <td>data</td>
            <td>data</td>  
            <td>data</td>
        </tr>
        <tr class="clickable" data-toggle="collapse" id="row2" data-target=".row2">
            <td><i class="glyphicon glyphicon-plus"></i></td>
            <td>data</td>
            <td>data</td>  
            <td>data</td>
        </tr>
        <tr class="collapse row2">
            <td>- child row</td>
            <td>data 2</td>
            <td>data 2</td>  
            <td>data 2</td>
        </tr>
        <tr class="collapse row2">
            <td>- child row</td>
            <td>data 2</td>
            <td>data 2</td>  
            <td>data 2</td>
        </tr>
    </tbody>
</table>

如果这没有意义,那就这样想吧:

您想要执行八次操作,完成操作后,您希望对结果执行某些操作。在这种情况下,您需要添加八次数字,然后提醒总数。不幸的是,如果你说循环中的回归,它会尝试做某事&#34; (返回)在每个动作(添加)之后。因为它试图在每个动作之后返回,所以循环实际上在第一个动作之后中断,并且永远不会添加最后七个数字。如果你想观看这个过​​程,你实际上可以将警报放在你的返回语句所在的位置,并观察它在每次迭代后被击中(从而接收到8个警报)。

作为旁注,你还应该定义&#34; i&#34;使用$(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); }); ,因为您可以通过忘记&#34; var&#34;来实际操作范围。我也在上面的代码中解决了这个错误。谢谢Ryan引起人们的注意。

答案 1 :(得分:0)

        Image<Bgr, byte> source = new Image<Bgr, byte>(@"D:\work\htdocs\coc\public\Barracks\b6.bmp"); // Image B
        Image<Bgr, byte> template = new Image<Bgr, byte>(@"D:\work\htdocs\coc\public\Barracks\Cropped\b6-1.bmp"); // Image A
        Image<Bgr, byte> imageToShow = source.Copy();

        using (Image<Gray, float> result = source.MatchTemplate(template, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED))
        {
            double[] minValues, maxValues;
            Point[] minLocations, maxLocations;
            result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

            // You can try different values of the threshold. I guess somewhere between 0.75 and 0.95 would be good.
            if (maxValues[0] > 0.9)
            {
                // This is a match. Do something with it, for example draw a rectangle around it.
                Rectangle match = new Rectangle(maxLocations[0], template.Size);
                imageToShow.Draw(match, new Bgr(Color.Red), 3);
            }
        }

        // Show imageToShow in an ImageBox (here assumed to be called imageBox1)
        imageBox1.Image = imageToShow;

答案 2 :(得分:0)

您将返回循环内部的值。当循环第一次执行时,它会将第一个数组值添加到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);
});

答案 3 :(得分:0)

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

你的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);
});

答案 4 :(得分:0)

你可以使用它:

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

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

答案 5 :(得分:0)

除了大家已经说过的内容之外,当你在循环外部返回时,函数仍然可以运行,我会改变你在函数和循环中调用数组的方式。

您的数组名为&#34; array&#34;。你在函数参数中调用它作为&#34; arr&#34;,因此我认为在随后的for循环函数中你应该将数组调用标记为&#34; arr&#34;太。无论哪种方式,它都能为我提供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);
});