Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript考试中的任务-通过循环和制动从数组中查找第一个双变量_Javascript_Arrays - Fatal编程技术网

JavaScript考试中的任务-通过循环和制动从数组中查找第一个双变量

JavaScript考试中的任务-通过循环和制动从数组中查找第一个双变量,javascript,arrays,Javascript,Arrays,我是第一次上Stack-你能帮忙吗? 我的考试: 查找数组的索引,该索引描述具有双精度或更高精度的var的第一个位置 var f=[100,2,94,1,8,94,7,1,94,23]; //U-see-94是双重和双重的。 var指数; //我的结果是8(答案当然是2)。 对于(i=0;i

我是第一次上Stack-你能帮忙吗? 我的考试: 查找数组的索引,该索引描述具有双精度或更高精度的var的第一个位置

var f=[100,2,94,1,8,94,7,1,94,23];
//U-see-94是双重和双重的。
var指数;
//我的结果是8(答案当然是2)。
对于(i=0;i<(f.length-1);i++){
第一指数=i;
对于(j=(firstIndex+1);jconsole.log(firstIndex)目前,
break
语句只从内部循环跳出,而不是从外部循环跳出,因此它没有打印预期结果。要解决这个问题,您只需在外循环之前声明一个布尔变量,并将其设置为
false
,然后当您找到匹配项时,可以将其设置为
true
。接下来,在内部循环之后,立即检查布尔标志是否为
true
,然后再次
break
跳出外部循环。

您的
break
语句只存在内部循环,因为
firstIndex
将始终是
i
的最后一个值(
f.length-2
):

for(i=0;i<(f.length-1);i++){//循环A
第一指数=i;
对于(j=(firstIndex+1);j
您可能更容易将循环包装到一个接受要检查的数组的函数中:

function checkDoubles(arr){
    for(var i = 0; i < f.length - 1; i++){
        /*
        *   Omitted for you to solve
        */
    }
}

firstIndex = checkDoubles(f)
功能双重校验(arr){
对于(变量i=0;i
var f=[100,2,94,1,8,94,7,1,94,23];
//U-see-94是双重和双重的。
var-foundDouble=false;
var指数;
//我的结果是8(答案当然是2)。
对于(i=0;i<(f.length-1)和&!foundDouble;i++){
第一指数=i;
对于(j=(firstIndex+1);j
那应该行。

只需使用一个布尔标志退出第一个
,就可以了,我会按如下方式做。。。不需要双循环

虽然我不确定这有多高效,但我相信内置函数已经优化

为了清晰起见,我使用了一个中间变量,但它是可选的

参考:JavaScript数组内置方法和

var f=[100,2,94,1,8,94,7,1,94,23];
//索引=2处的值94是第一个副本。
var值;
对于(i=0;i<(f.length-1);i++){
该值=f[i];
如果(f.indexOf(thisValue)!==f.lastIndexOf(thisValue)){
控制台日志(i);
打破
}

}
@NickA这会有什么实质性的区别呢?@NickA如果所有的代码都被一个函数包装,并且
控制台.log
返回
替换,
中断
的操作与现在没有任何不同?如果您的意思是第二个循环应该在一个新函数中,并且该函数应该
返回
,那么您应该澄清一下。这是练习中的文本:在``code>for``循环中,找出哪个数字是第一个,将其分配给
`firstIndex``变量,并在控制台中列出其索引。@NickA您误解了我的意思。您的“提示”是不明确的,因为您的建议应该由函数包装。如果你的评论意味着将所有发布的代码包装到一个函数中,然后用
return
语句替换
console.log
,那么代码的操作将不会与现在有任何不同。我只是说你的建议应该更简洁。@ScottMarcus不,你是对的,考虑到这个问题,评论可能有点含糊不清,也许我有点轻率,抱歉
function checkDoubles(arr){
    for(var i = 0; i < f.length - 1; i++){
        /*
        *   Omitted for you to solve
        */
    }
}

firstIndex = checkDoubles(f)
var f = [100,2,94,1,8,94,7,1,94,23];

//U see - 94 is double and tiple.
var foundDouble = false;
var firstIndex;

//my result is 8 (Answer is 2 of course).

for (i=0; i < (f.length-1) && !foundDouble; i++) {
firstIndex = i;
for (j = (firstIndex + 1); j < f.length; j++) {
    if ( f[j] == f[firstIndex] ) {
      foundDouble = true;
        break;
    }
  }
}
console.log(firstIndex);