JavaScript – Map, Reduce, Filter. Functions in JavaScript

One of the New Years Resolutions, if I had one, would have been to learn JS this year. And as far as I am a VBA developer I automatically assume that I know the basics of it. But still, there are some nice things in JS that one can only dream about in VBA. Thus, in this article I have decided to summarize some of them.JS

Let’s start. The nice things for a VBA developer in JS are probably mapping, filtering and reduction. The idea of mapping is to produce something out of an array. E.g. in the example I produce a new array from the squared values of my array. (arr_b) Then I filter the array, getting only each third value in the array (arr_c). In arr_d and arr_e I use reduction. Reduction does not return arrays, thus the naming “arr_d” and “arr_e” is not really a good idea, but I have done it.

To make the article a nicer one, I have decided to add an object with functions – simple_plan. In this object I have two functions, both of which are generating some variables. The “add_one” function also returns “ALE”, so we may see it if we print the function with “document write”. This is what we get from our code:

mapreduce

This is the code itself:

arr_a = [8,10,12,1,17,29,30];

arr_b = arr_a.map(function (sqrt){
   return sqrt * sqrt;
});

arr_c = arr_b.filter(function(x,counter){
   return counter % 3 == 2; //each third
});

arr_d = arr_a.reduce(function(x,y){
   return x + y + 50;
});

arr_e = arr_a.reduce(function(x,y){
   return (x<y?x:y);
});

var simple_plan = {
   week1: 100,
   week2: 200,

   average: function() {
      this.avg = (this.week1 + this.week2) / 2;
   },

   add_one: function(){
      this.added_one = (this.avg*2+1);
      return "ALE";
   }
}


simple_plan.average();
simple_plan.add_one();

simply_print(arr_a);
simply_print(arr_b);
simply_print(arr_c);
simply_print(arr_d);
simply_print(arr_e);
simply_print(simple_plan.avg);
simply_print(simple_plan.add_one());
simply_print(simple_plan.added_one);


function simply_print(arr_k){
   document.write("<hr>");

   if (!Array.isArray(arr_k)) {
      document.write(arr_k);
      return;
   }

   for (i=0;i< arr_k.length;i++){
      document.write(arr_k[i]+"<br>");
   }
}

Here comes the code in github. Enjoy it! 😀