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

JavaScript for...in循环改普通for循环报错,求代码问题排查

错误原因

  • 普通for循环的终止条件写法错误:你写的i < Object.values(scores)是直接拿数字和数组做比较,结果永远为false,循环完全不会执行。正确写法需要获取数组的length属性,你前面已经提前把Object.values(scores)赋值给了scoresValue变量,直接用i < scoresValue.length即可,无需重复调用Object.values。
  • 你提供的完整代码中还有一处冗余错误:中间段for (let i = 0; i <scores.length; i++)的条件不成立,scores是对象不是数组,本身没有length属性,这段代码永远不会执行,建议直接删除。

修正后的代码

改写后的for循环片段

for (let i=0; i < scoresValue.length; i++){
  let key = scoresKeys[i];
  let value = scoresValue[i];
  const newValue = changeValue[value];
  newObj[key] = newValue;
}

完整修正后的函数

const getExamResult = (scores, requiredClasses) => {
  let newObj = {};
  let scoresKeys = Object.keys(scores);
  const scoresValue = Object.values(scores);
  // 学分映射对象
  const changeValue = {
    'A+': 4.5,
    'A': 4,
    'B+': 3.5,
    'B': 3,
    'C+': 2.5,
    'C': 2,
    'D+': 1.5,
    'D' : 1,
    'F' : 0
  };
  
  // 修正后的普通for循环
  for (let i = 0; i < scoresValue.length; i++) {
    const key = scoresKeys[i];
    const value = scoresValue[i];
    const newValue = changeValue[value];
    newObj[key] = newValue;
  }

  for (let index in requiredClasses) {
    let element = requiredClasses[index];
    if (!newObj[element]) {
      newObj[element] = 0;
    }
  }
  
  return newObj;
}

内容的提问来源于stack exchange,提问作者JiwanJeon94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:09:03