Main difference between map and reduce

后端 未结 6 1202
日久生厌
日久生厌 2020-12-12 12:38

I used both methods but I am quite confused regarding the usage of both methods.

Is anything that map can do but reduce can not and vice ve

6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-12 13:13

    Source

    Both map and reduce have as input the array and a function you define. They are in some way complementary: map cannot return one single element for an array of multiple elements, while reduce will always return the accumulator you eventually changed.

    map

    Using map you iterate the elements, and for each element you return an element you want.

    For example, if you have an array of numbers and want to get their squares, you can do this:

    // A function which calculates the square
    const square = x => x * x
    
    // Use `map` to get the square of each number
    console.log([1, 2, 3, 4, 5].map(square))

    reduce

    Using an array as an input, you can get one single element (let's say an Object, or a Number, or another Array) based on the callback function (the first argument) which gets the accumulator and current_element parameters:

    const numbers = [1, 2, 3, 4, 5]
    
    // Calculate the sum
    console.log(numbers.reduce(function (acc, current) {
      return acc + current
    }, 0)) // < Start with 0
    
    // Calculate the product
    console.log(numbers.reduce(function (acc, current) {
      return acc * current
    }, 1)) // < Start with 1


    Which one should you choose when you can do the same thing with both? Try to imagine how the code looks. For the example provided, you can compute the squares array like you mentioned, using reduce:

    // Using reduce
    [1, 2, 3, 4, 5].reduce(function (acc, current) {
        acc.push(current*current);
        return acc;
     }, [])
    
     // Using map
     [1, 2, 3, 4, 5].map(x => x * x)
    

    Now, looking at these, obviously the second implementation looks better and it's shorter. Usually you'd choose the cleaner solution, which in this case is map. Of course, you can do it with reduce, but in a nutshell, think which would be shorter and eventually that would be better.

提交回复
热议问题