wangzengdi's Blog

Functional Programming

0%

Ramda 源码分析(二) map reduce filter

map、reduce 和 filter 是函数式编程中用到频率非常高的三个函数,对类Array 类型操作非常方便,被称为 FP 中的三板斧。还有几个相关的稍微复杂的函数也一并介绍: chain(flattenMap)、transduce、into、reduced。

图解 map/reduce/filter

虽然这是 Underscore 方式的写法,但不影响对三个概念的理解.

map/reduce/filter

源码分析

  • map

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    module.exports = _curry2(_dispatchable('map', _xmap, function map(fn, functor) {
    switch (Object.prototype.toString.call(functor)) {
    case '[object Function]':
    return curryN(functor.length, function() {
    return fn.call(this, functor.apply(this, arguments));
    });
    case '[object Object]':
    return _reduce(function(acc, key) {
    acc[key] = fn(functor[key]);
    return acc;
    }, {}, keys(functor));
    default:
    return _map(fn, functor);
    }
    }));