Hemanth.HM

A Computer Polyglot, CLI + WEB ♥'r.

Recursive Map, Reduce and Filter in Javascript

| Comments

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

Comments