【问题标题】:javascript is looping wrong when beginning is negative当开始为负时,javascript循环错误
【发布时间】:2021-07-07 09:06:48
【问题描述】:

谁能解释为什么我的 for 循环即使迭代 30 次(-10+20 = 30 次迭代),但在打印 innerHTML 时,它以 10x 未定义开始,然后从 -10 开始打印到 10而不是 -10 到 20?

循环开始和结束的值在外部js脚本中定义,document.getElementByID,稍后返回。也许tihs可以提供帮助。如果我

 if (temperaturStart < 0){

            for(var i= temperaturStart; i<=  temperaturEnde; i++){
                temperaturArray.push(i* 9/5 + 32)
                var tbodyEL = document.querySelector("tbody");
                tbodyEL.innerHTML +=
                    `
                    <tr>
                        <td id="${tSpalte}">${temperaturArray[i]}</td>
                        <td id="${dichteSpalte}">${dataArrayDichte[i]}</td>
                        <td id="${DynVisSpalte}">${dataArrayDynVis[i]}</td>
                        <td id="${wärmeleitSpalte}">${dataArrayWärmeleit[i]}</td>
                        <td id="${stoffSpalte}">${stoff}</td>
                        <td id="${einheitSpalte}">${einheit}</td>
                    </tr> 
                    `
            }

【问题讨论】:

  • 你从文档中读取temperaturStart后是否将其转换为数字?
  • 您尝试过什么解决问题的方法?你被困在哪里了?
  • @ChrisG 是的,我做到了。该值是从 html 输入中读取的。输入类型本身是数字,因此必须将其读取为数字。但只是为了确保我也用 parseInt(document.getElementByiID().value 进行了尝试。但它仍然不起作用,。
  • type="number" 并不意味着你会从.value 得到一个号码。但是 adiga 发现了一个明显的问题:您正在访问负数组索引。

标签: javascript html for-loop


【解决方案1】:

i 用于跟踪temperaturStarttemperaturEnde 之间的范围。它可以是负面的。当您访问td 中所有这些数组的负索引时,它将返回未定义。您需要另一个变量 j,它以 0 开头,以访问每个数组的索引:

// move this outside
var tbodyEL = document.querySelector("tbody");

for(var i= temperaturStart, j = 0; i <= temperaturEnde; i++, j++){
    temperaturArray.push(i* 9/5 + 32)

    tbodyEL.innerHTML +=
        `
        <tr>
            <td id="${tSpalte}">${temperaturArray[j]}</td>
            <td id="${dichteSpalte}">${dataArrayDichte[j]}</td>
            <td id="${DynVisSpalte}">${dataArrayDynVis[j]}</td>
            <td id="${wärmeleitSpalte}">${dataArrayWärmeleit[j]}</td>
            <td id="${stoffSpalte}">${stoff}</td>
            <td id="${einheitSpalte}">${einheit}</td>
        </tr> 
        `
}

目前还不清楚dataArrayDichtedataArrayDynVis 和其他数组是如何填充的。如果它们像temperaturArray 这样填充在循环中,您可以将它们分配给局部变量:

var temperature = i * 9/5 + 32

然后直接在中使用

<td id="${tSpalte}">${temperature}</td>

您不必创建 j 变量或数组。


我假设tSpalte 是在循环内创建的。否则,多个元素将具有相同的ids。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2018-01-02
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多