reduce accumulator by reference code example

Example 1: reduce array to object javascript

const posts = [
    {id: 1, category: "frontend", title: "All About That Sass"},
    {id: 2, category: "backend", title: "Beam me up, Scotty: Apache Beam tips"},
    {id: 3, category: "frontend", title: "Sanitizing HTML: Going antibactirial on XSS attacks"}
];

const categoryPosts = posts.reduce((acc, post) => {
    let {id, category} = post;
    return {...acc, [category]: [...(acc[category] || []), id]};
}, {});

Example 2: reduce method javascript

// Reduce() method executes a callback function that is passed in
// on each element of the array, resulting in single output value.
const array1 = [1, 2, 3, 4];
const callback = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4
console.log(array1.reduce(callback));
// expected output: 10

// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(callback, 5));
// expected output: 15 because the initial value is 5.

// This is how Reduce works.
// This is a myReduce method which takes a callback and an optional argument 
// of a default accumulator. If myReduce only receives one argument, then 
// myReduce will use the first element as the accumulator.

Array.prototype.myReduce = function(callback, acc) {
    if (!acc) {
        acc = this.shift();
    }
    this.forEach(function(element) {
        acc = callback(acc, element)
    })
    return acc;
}