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);
});