无法在javascript中对for循环内的值求和

无法在javascript中对for循环内的值求和,javascript,Javascript,我相信这是一个范围问题,但idk为什么它不起作用。 我对js相当陌生,尝试检查文档,但仍然无法解决它 出于某种原因,soma变量在For循环中始终记录为NaN。 Prob很简单,但我已经在桌子上敲了将近一个小时的头了。帮助D: 常数valid1=[4,5,3,9,6,7,7,9,0,8,0,1,6,8,0,8] //卢恩算法 validateCred=array=>{ 变量计数=0 var-soma=0 对于i=array.length;i!=-1;i-{ 如果计数===0{ 计数+=1 so

我相信这是一个范围问题,但idk为什么它不起作用。 我对js相当陌生,尝试检查文档,但仍然无法解决它

出于某种原因,soma变量在For循环中始终记录为NaN。 Prob很简单,但我已经在桌子上敲了将近一个小时的头了。帮助D:

常数valid1=[4,5,3,9,6,7,7,9,0,8,0,1,6,8,0,8] //卢恩算法 validateCred=array=>{ 变量计数=0 var-soma=0 对于i=array.length;i!=-1;i-{ 如果计数===0{ 计数+=1 soma+=数组[i] }否则{ i阵列[i]*2>9{ soma+=数组[i]*2-9 }否则{ soma+=数组[i]*2 } 计数=0 } console.logsoma%10//预期输出===0 } } validateCredvalid1将i=array.length更改为i=array.length-1&在循环后移动console.log

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
// Luhn Algorithm
validateCred = (array) => {
    var count = 0
    var soma = 0
    for (i=array.length - 1; i != -1; i--) {
        if (count === 0) {
            count += 1
            soma += array[i]
        } else {
            if(array[i]*2 > 9) {
                soma += array[i]*2 - 9
            } else {
                soma += array[i]*2
            }
            count = 0
        }
    }
     console.log(soma%10) // expected output === 0
}

validateCred(valid1)

数组的最后一项位于array.length-1位置,因为第一个元素位于0位置,这就是array[array.length]返回nan的原因。此外,您可能需要了解迭代数组的标准方法:array.foreach、array.filter、,array.reduce和array.map.

i=array.length-这会使您在开始时超出数组的范围。数组索引从0开始,一直运行到Array.length-1。此外,控制台日志在循环内-您的期望是它在循环外。这是否回答了您的问题?数组[array.length]返回未定义的not NaN。另外,关于数组原型函数的部分可能有点误导。filter、.reduce和.map有特定的用法,它们不是for循环的替代品。而且它们都不包括。forEach以相反的顺序迭代。这是真的。