如何使用JavaScript的reduce()方法计算每门课程的练习总数量?
你的代码在当前提供的courses测试数据下可以正常输出正确结果,会依次打印42、10两个数值,对应两门课的总练习量,但存在两处可以优化的潜在问题:
- 未给
reduce设置初始累加值:如果某门课程的parts数组为空,代码会直接抛出TypeError。建议始终给数值累加场景的reduce添加初始值0,既规避边界报错,也让代码逻辑更易读。 map方法使用不符合设计初衷:map是用来生成新数组的方法,如果你只是需要遍历打印结果,改用forEach更合适;如果需要存储计算结果,直接接收map的返回值即可,不需要仅在回调中执行打印操作。
优化后代码示例
仅需要打印结果的写法
courses.forEach(course => { const total = course.parts.reduce((s, p) => s + p.exercises, 0) console.log(`${course.name}总练习量:${total}`) })
需要保留计算结果的写法
// 得到包含每门课总练习量的新数组 const courseTotalList = courses.map(course => ({ id: course.id, name: course.name, totalExercises: course.parts.reduce((s, p) => s + p.exercises, 0) })) // 可以按需使用这个结果数组 console.log(courseTotalList)
内容的提问来源于stack exchange,提问作者Kim-Jun-Un
相关产品推荐
相关产品推荐

