You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:07