【问题标题】:How to properly iterate across an array and work with scope如何正确遍历数组并使用范围
【发布时间】:2019-06-23 15:01:09
【问题描述】:

我正在尝试使用 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 以供以后使用会容易得多。

【问题讨论】:

  • 您可能会考虑在编写代码时使用一致的缩进 - 这将使阅读和调试变得更加容易,不仅对于潜在的回答者,而且对于您来说,当我们都可以看到 { } 块及其嵌套级别一目了然,而不必仔细挑选每一行来挑选逻辑路径。
  • arrayCombi 是干什么用的。我的意思是你期望它是什么
  • Visual Studio 代码通常为我完成所有这些工作,我在格式化 stackoverflow 的代码时遇到问题,抱歉。 arrayCombi (arrayCombination) 只是arrayOne的第一个索引除以arrayTwo的第一个索引,索引二,索引三......等等。它是为了找出产品的成本效率,我将产品的性能潜水产品的成本。

标签: javascript arrays scope


【解决方案1】:

我猜你想要的 topScore 是数组arrayCombi 的最大值,它由arrayOne 中的元素除以arrayTwo 组成。然后,您需要在外部范围内声明所有这些变量。您还定义了两个单循环,而不是第二个嵌套在第一个循环中。而且您需要使用 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);
    }
}

【讨论】:

  • 你可以只用一个循环来完成这一切,顺便说一下,把两个循环都留在那里,以免过多地改变你的原始代码
猜你喜欢
  • 2020-05-14
  • 2017-02-18
  • 2016-03-22
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多