用lodash链接咖喱功能

时间:2014-11-20 16:35:16

标签: javascript chaining currying lodash

受到this article on curry functions的启发,我试图将它们联系起来,并提出了这个解决方案。我不确定mixin,因为我不知何故觉得lodash可能已经有了这样的功能。如果是这样,这个函数叫什么?

var _ = require('lodash');

var get = _.curry(function(property, object) {return object[property]});

var map = _.curry(function(fn, objects){ return objects.map(fn) });

var json = {
    "user": "hughfdjackson",
    "posts": [
        { "title": "why curry?", "contents": "..." },
        { "title": "prototypes: the short(est possible) story", "contents": "..." }
    ]
}

_.mixin({
    then:function(input, fn) {return fn(input);}
});

_(json)
    .then(get('posts'))
    .then(map(get('title')))
    .tap(console.log)

1 个答案:

答案 0 :(得分:3)

在休·杰克逊的(优秀!)文章中,then函数可能来自Promise库,可能与AJAX调用有关。如果你从那里开始,那么你自己不需要自己动手。将它混合到_就像这样看起来很奇怪。

Lo-Dash和Underscore允许您使用curry函数执行此操作。一些较新的库(例如 Ramda FKit 会自动执行此操作。他们的getmap版本已经过咖喱,旨在以这种方式使用。 (披露:我是Ramda的作者之一)