【问题标题】:JS Why doesn't this nested for loop function properly?JS 为什么这个嵌套的for循环不能正常工作?
【发布时间】:2020-03-21 13:18:20
【问题描述】:

我不知道这个 for 循环有什么问题。代码对我来说看起来不错,但嵌套循环没有正确增加值 peakAverage。

// Update bar data
for (let i = 0; i < bars.length; i++) {

    let peakAverage = 0;

    if (settings.bars.barsAmount < 7) {

        for (let j = 64 / (Math.pow(2, settings.bars.barsAmount) * i); j < 64 / (Math.pow(2, settings.bars.barsAmount) * (i + 1)); j++) {

            peakAverage += finalProcessing[j];
        }

        peakAverage /= 64 / Math.pow(2, settings.bars.barsAmount)

        bars[i].desiredHeight = peakAverage * canvas.height / 3 + 1;
    }
}

代码应该根据bars 数组的长度从finalProcessing 数组中获取值,这样对于bars 数组的每个元素,finalProcessing 数组的一部分被迭代,然后计算这些值的平均值。

【问题讨论】:

  • 你需要解释这段代码应该执行什么?从语法上看,它看起来还不错。但是条件j&lt;... 可能永远不会执行。
  • 很难理解您的代码,因为我们缺少有关 barssettingsfinalProcessing 的信息
  • @DumbCoder7 和@Guerric P,bars 是一个可能长度为 2^x 的数组。 settings.bars.length 是 2 的指数。最后,finalProcessing 是一个固定长度为 64 的数组。
  • 哦,最后评论应该是settings.bars.barsAmount
  • 除非i 为负数,否则64 / (Math.pow(2, settings.bars.barsAmount) * (i + 1)) 总是小于64 / (Math.pow(2, settings.bars.barsAmount) * i),所以循环永远不会迭代。

标签: javascript arrays for-loop


【解决方案1】:

感谢@Bergi 指出我的计算公式不正确。正确的公式应该是 (64 / Math.pow(2, settings.bars.barsAmount)) * i(64 / Math.pow(2, settings.bars.barsAmount)) * (i + 1) 而不是 64 / (Math.pow(2, settings.bars.barsAmount) * i)64 / (Math.pow(2, settings.bars.barsAmount) * (i + 1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多