JavaScript考试中的任务-通过循环和制动从数组中查找第一个双变量
我是第一次上Stack-你能帮忙吗? 我的考试: 查找数组的索引,该索引描述具有双精度或更高精度的var的第一个位置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
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);j console.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;ivar 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);