JSFiddle - React, Tailwind, and code Playground

by jing1996

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js"></script>

JavaScript

const timer = (marked, fn) => {
  console.time(marked);
  fn();
  console.timeEnd(marked);
};

const makeArr = (randomCeil) => (len) =>
  Array.from({ length: len }, (v, i) => Math.floor(Math.random() * randomCeil));

const arrOfMillion = makeArr(100)(1e6);

const tripleIt = (num) => num * 3;

const isEven = (num) => num % 2 === 0;


timer('first way - map & filter', () => {
  const result = arrOfMillion.map(tripleIt).filter(isEven);
});

timer('second way - forEach', () => {
  const result = [];

  arrOfMillion.forEach((item) => {
    const tripleItem = tripleIt(item);

    if (isEven(tripleItem)) {
      result.push(tripleItem);
    }
  });

});

timer('third way - transduce', () => {
  const transducer = R.compose(R.filter(isEven), R.map(tripleIt));

  const reducer = (acc, val) => (acc.push(val), acc); // same as (acc, val) => { acc.push(val); return acc }

  const result = R.transduce(transducer, reducer, [], arrOfMillion);
  });