.reduce(function(a, b) { return a && b;})

Hello,

Can anyone please explain to me a bit what exactly this “.reduce(function(a, b) { return a && b;})” do here? I don’t quite understand it.

  // filter the collection
  return collection.filter(function(obj) {
    return srcKeys
      .map(function(key) {
        return obj.hasOwnProperty(key) && obj[key] === source[key];
      })
      .reduce(function(a, b) {  // what does this ".reduce" do here?
        return a && b;
      });
  });

It is from solution 3 of this challenge:

Thank you.

the reduce method takes the elements of an array and reduce them to a single value using the callback, you can read about it here:

2 Likes

Specifically concerning this challenge:

The reduce method receives an array from the map method, an array that will contain a number of Booleans (depending on the length of your srcKeys).

reduce will now iterate over that array, and in each step, it will compare the accumulator (the a parameter) and the current element (the b parameter) with &&, so it will only return true if both are true. The return value will go into reduce again in the next step as the new a parameter. So in the end, it will only return true if all values in that array were true. If there’s just one false, a will become false and the comparison a && b will always be false for all following steps.

In this particular case, you could also get the same result by using the every method on the array instead of reduce.

9 Likes

Thank you very much for the detailed explanation.