如何在数组上正确迭代并使用范围

时间:2019-01-30 10:47:30

标签: javascript arrays scope

我正在尝试使用arrayOne并将索引除以等于arrayTwo的索引号。我为原始代码编写了一个非常简洁的模拟文件,以提高可读性。

试图使用不同的语法重新编写代码,但无能为力。

let arrayOne = [ 2,7,5,89,4,67,8,5,3,8];
let arrayTwo = [ 5,87,5,3,7,89,5,34,7,98];
for( i = 0; i < arrayOne.length; i++){
    let arrayCombi = [arrayOne[i] / arrayTwo[i]];
    console.log(arrayCombi); 
    let topScore = 0;
    for( a = 0; a < arrayOne.length; a++){
        if (arrayCombi[a] > topScore){
            topScore = arrayCombi[a];
            console.log("Top Score; " + topScore);
        }
    }
}

由于某种原因,JS似乎忽略了If语句,而是将每个arrayCombi索引打印为topScore,而不是在arrayCombi [a]大于topScore时仅更新topScore。我认为我使用的迭代器是错误的。 如果可能的话,如果我能够从块代码中删除创建的arrayCombi,以便以后使用,将会容易得多。

1 个答案:

答案 0 :(得分:1)

我想您想要的是topScore是由arrayOne除以arrayTwo的元素组成的arrayarrayCombi的最大值。然后,您需要在外部范围中声明所有这些变量。您还定义了两个单循环,而不是第二个嵌套在第一个循环中。而且您需要使用push(),否则,您只需为arrayCombi重新分配新值[arrayOne [i] / arrayTwo [i]](这意味着它将始终是一个只有一个元素的数组)。尝试这种方式:

let arrayOne = [ 2,7,5,89,4,67,8,5,3,8];
let arrayTwo = [ 5,87,5,3,7,89,5,34,7,98];
let arrayCombi = [];
for( let i = 0; i < arrayOne.length; i++){
    arrayCombi.push(arrayOne[i] / arrayTwo[i]);
    console.log(arrayCombi);
} 
let topScore = 0;
for( let a = 0; a < arrayOne.length; a++){
    if (arrayCombi[a] > topScore){
        topScore = arrayCombi[a];
        console.log("Top Score; " + topScore);
    }
}