Test name | Executions per second |
---|---|
Lodash funcional style (idiomatic) | 2907.0 Ops/sec |
Lodash functional style (performance optimized with spread) | 5210.2 Ops/sec |
Ramda without relying on currying or composition | 880.6 Ops/sec |
Ramda with currying and composition | 864.6 Ops/sec |
Ramda with transducers | 759.1 Ops/sec |
VanillaJS funcional style (idiomatic) | 2703.3 Ops/sec |
VanillaJS functional style (performance optimized with spread) | 5908.4 Ops/sec |
VanillaJS procedural | 6313.7 Ops/sec |
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
var data = [];
for (var i = 0; i < 10000; i++) {
data.push({ counter: i });
}
function isOdd(num) {
return num % 2 === 1;
}
function square(num) {
return num * num;
}
function lessThanThreeDigits(num) {
return num.toString().length < 3;
}
var expected = data.map(o => o.counter).filter(isOdd).map(square).filter(lessThanThreeDigits);
var result = _.chain(data)
.map('counter')
.filter(isOdd)
.map(square)
.filter(lessThanThreeDigits)
.value();
var result = _.reduce(data, function(acc, d) {
var c = d.counter;
return (isOdd(c) && lessThanThreeDigits(square(c)))
? [acc, square(c)]
: acc;
}, []);
var result = R.filter(lessThanThreeDigits,
R.map(square,
R.filter(isOdd,
R.pluck('counter', data))));
var result = R.pipe(
R.pluck('counter'),
R.filter(isOdd),
R.map(square),
R.filter(lessThanThreeDigits)
)(data);
const xf = R.compose(
R.map(R.prop('counter')),
R.filter(isOdd),
R.map(square),
R.filter(lessThanThreeDigits)
);
const result = R.transduce(xf, R.flip(R.append), [], data);
var result = data.map(o => o.counter).filter(isOdd).map(square).filter(lessThanThreeDigits);
var result = data.reduce((acc, d) => {
var c = d.counter;
return (isOdd(c) && lessThanThreeDigits(square(c)))
? [acc, square(c)]
: acc;
}, []);
var result = new Array();
for (var i = 0; i < data.length; i++) {
var c = data[i].counter;
if (isOdd(c)) {
var r = square(c);
if (lessThanThreeDigits(r)) {
result.push(r);
}
}
}