如何在JavaScript的for循环中嵌入计算与if判断,正确语法是什么?
Luhn算法校验函数修改方案
现存问题
- 当前运算产生的乘2值、减9结果没有被存储或参与后续计算,循环执行完没有有效输出
- 未纳入无需翻倍的剩余位数值参与最终校验计算
- 缺少最终的校验判断逻辑和返回值
修正后完整代码
const validateCred = array => { let totalSum = 0; // 处理需要翻倍的隔位:从倒数第二位开始倒序隔位取数 for (let i = array.length - 2; i >= 0; i -= 2) { let multiplyVal = array[i] * 2; totalSum += multiplyVal > 9 ? multiplyVal - 9 : multiplyVal; } // 处理不需要翻倍的剩余位 for (let i = array.length - 1; i >= 0; i -= 2) { totalSum += array[i]; } // Luhn校验规则:总和模10等于0即为有效 return totalSum % 10 === 0; };
可选单循环优化实现
如果你希望压缩为单个循环完成所有逻辑,可以参考如下写法:
const validateCred = array => { let totalSum = 0; let shouldDouble = false; // 从最后一位倒序全量遍历 for (let i = array.length - 1; i >= 0; i--) { let current = array[i]; if (shouldDouble) { current *= 2; totalSum += current > 9 ? current - 9 : current; } else { totalSum += current; } shouldDouble = !shouldDouble; } return totalSum % 10 === 0; };
内容的提问来源于stack exchange,提问作者Arjan van der Laan
相关产品推荐
相关产品推荐

