Here is a more functional way of map, reduce and filter functions in javascript:
map:
1
2
| let map = (fn,list) => !list.length ? []:
[fn(list[0])].concat(map(fn,list.slice(1)));
|
1
| map(x=>x+1,[1,2,3,4)) // => [2,3,4,5]
|
reduce:
1
2
| let reduce = (fn, value, list) => (!list.length) ? value :
reduce(fn, fn(value,list[0]),list.slice(1));
|
1
| reduce((x,y)=>x+y,0,[1,2,3,4]); // => 10
|
filter:
1
2
3
| let filter = (predicate,list) => !list.length ? []:
(predicate(list[0]) ?
[list[0]] : []).concat(filter(predicate,list.slice(1)));
|
1
| filter(x=>x>2,[1,2,3,4,5]); // => [3,4,5]
|
Do let me know if you are aware of better way to do the same ;)