我需要帮助来理解和实践Js中的reduce()方法。
我想通过reduce()来计算每门课的总习题数。
这是正确的方式吗?
s = previousValue,
p = currentValue,
正如@Rani sharimm在评论中提到的,我必须在零件数组上使用reduce()。
courses.map((course) => { console.log(course.parts.reduce((s, p) => s + p.exercises)) })
const courses = [
{
name: "Half Stack application development",
id: 1,
parts: [
{
name: "Fundamentals ",
exercises: 10,
id: 1,
},
{
name: "Using data",
exercises: 7,
id: 2,
},
{
name: "State ",
exercises: 14,
id: 3,
},
{
name: "React",
exercises: 11,
id: 4,
},
],
},
{
name: "Node.js",
id: 2,
parts: [
{
name: "Routing",
exercises: 3,
id: 1,
},
{
name: "Middlewares",
exercises: 7,
id: 2,
},
],
},
];
第一个参数通常是先前的值,但是您可以使用initialValue
初始化第一个参数
阅读手册
reduce((previousValue, currentValue, currentIndex, array) => { ... }, initialValue)
const courses = [
{
name: "Half Stack application development",
id: 1,
parts: [
{ name: "Fundamentals ", exercises: 10, id: 1, },
{ name: "Using data", exercises: 7, id: 2, },
{ name: "State ", exercises: 14, id: 3, },
{ name: "React", exercises: 11, id: 4, },
],
},
{
name: "Node.js",
id: 2,
parts: [
{ name: "Routing", exercises: 3, id: 1, },
{ name: "Middlewares", exercises: 7, id: 2, },
],
},
];
courses.forEach(course => {
course.totalExercises = course.parts.reduce(
(accumulator, part) => accumulator + part.exercises,
0 // initial value for accumulator
);
console.log(course.name, ', total exercises:', course.totalExercises);
});
console.log(courses);
要了解基于失败-成功的reduce如何工作,请尝试将console.log
放入reducer中:
const parts = [ {exercises: 5}, {exercises: 3}, {exercises: 7} ];
const result = parts.reduce(
(prev, curr, _, arr) => {
console.log('prev: ', prev);
console.log('curr: ', curr);
console.log('--------');
return prev + curr.exercises;
},
0
);
console.log('result:', result);