functional filter
by Csaba Hellinger
HTML
Functional:
<ul>
<li>No variables</li>
<li>No mutation</li>
<li>No side effects</li>
<li>No loops</li>
<li>Recursion with proper tail call</li>
</ul>
(Results on the console)
CSS
ul {
margin-top: 0;
}
JavaScript
function filter(input, callback) {
function inner(input, callback, index, output) {
if (index === input.length) {
return output;
}
return inner(input, callback, index + 1, callback(input[index]) ? output.concat(input[index]) : output);
}
return inner(input, callback, 0, []);
}
// try it out
let items = [1, 2, 3, 4, 5, 6],
result = filter(items, item => item % 2 === 0);
console.log(items, 'even', result);