我通过使用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);
});
答案 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);
});