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
相关产品推荐
相关产品推荐

