【问题标题】:How to use reduce() to calculate the sum? [duplicate]如何使用 reduce() 计算总和? [复制]
【发布时间】:2021-11-29 17:47:54
【问题描述】:


我需要帮助来理解和练习 Js 中的reduce() 方法。
我想在reduce()的帮助下计算每门课程的练习总数。 \

这是正确的方法吗?

s = previousValue ,
p = 当前值,\

更新
正如评论中提到的@Rani Sharim,我必须在部件数组上使用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,
        },
      ],
    },
  ];

【问题讨论】:

  • 没有。零件是阵列,不是练习。你需要类似 course.parts.reduce((part, current) => part.exists + current)
  • @RaniSharim 它将不起作用,因为 part 和 current 都是对象,为了避免这样的问题,最好初始化第一个参数 previousValue - 我称之为累加器,用 0

标签: javascript


【解决方案1】:

第一个参数通常是以前的值,但您可以使用initialValue 初始化第一个参数。

Read manual

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);

【讨论】:

  • @harry9345 reduce 像这样工作:[part1, part2, part3][part2, part3][part3] - 所以它通过提供减少(删除)项目来减少数组,所以在开始时 part1part2 是对象,所以你以前的值就像一个保存最后一个返回的状态,以避免我用 0 初始化 previousValue 使它看起来像:[0, part1, part2,...]
猜你喜欢
  • 2018-08-24
  • 2016-08-01
  • 2019-10-28
  • 1970-01-01
  • 2017-09-29
  • 2019-03-30
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
相关资源
最近更新 更多