使用JavaScript的.map()求和对象键值结果异常,求问题原因
问题解答
你用错map()的核心功能了——map()的作用是遍历数组,把每个元素转换成新值,最终返回和原数组长度相同的新数组,不是用来做累加计算的。
看你的代码:每次迭代map时,你都把当前的sum计算结果返回了,第一次迭代sum变成14,返回14;第二次sum变成30,返回30,所以最终得到的是[14, 30]这个数组,而不是单个求和结果。
如果非要用map()来练习,正确的思路是先用map提取出所有grade值,再对提取后的数组求和,示例代码如下:
function getSumGrades(grades) { // 先用map把原数组转换成只存分数的数组:[14, 16] const gradeValues = grades.map(function(grade) { return grade.grade; }); // 再对提取后的数组求和(这里用reduce更简洁) return gradeValues.reduce(function(acc, cur) { return acc + cur; }, 0); } // Sample usage - do not modify let grades = [{ name: "Sam Blue", grade: 14 }, { name: "Charlie Bron", grade: 16 } ]; console.log(getSumGrades(grades)); // 输出30
关键总结
map()的定位是转换元素、生成新数组,不适合直接用来做累加求和操作- 若要练习
map(),可以用它完成数据提取的步骤,再结合reduce()或循环完成求和
内容的提问来源于stack exchange,提问作者BeginnerLeveljavascript
相关产品推荐
相关产品推荐

