获取将迭代函数应用于列表的 javascript 函数的最佳方法?

Best way to get a javascript function that applies an iteratee function to a list?

假设我有一个迭代函数,它接受一个项目和 returns 一个项目,例如用于 mapeach 函数等

愚蠢的例子:

function nameConverter(item) {
    return {
        fullName: item.firstName + ' ' + item.lastName;
    }
}

如果我有一个函数接受回调或对某个项目有承诺,直接传递 nameConverter 函数很容易:

return getPerson().then(nameConverter);

但是,我经常发现自己还需要一个函数获取一个列表,该函数使用所述迭代函数遍历列表。为此每次创建一个单行函数当然很简单:

return listPersons().then(function(persons) {
    return persons.map(nameConverter);
});

当我经常这样做时,没有更短的语法让我很困扰,所以我创建了一个辅助函数:

function mapper(iteratee) {
    return function(list) {
        return _.map(list, iteratee);
    }
}

这让我可以做到

return listPersons().then(mapper(nameConverter));

然后我进一步概括为:

function iterator(iterate, iteratee) {
    return function(list) {
        return iterate(list, iteratee);
    }
}

这样我就可以对 mapeachfilter 或任何 underscore/lodash 函数做同样的事情:

return listPersons().then(iterator(_.map, nameConverter));

但是,我很好奇是否有更好的方法,例如标准 Javascript 函数或 underscore/lodash 中已经有的东西可以做同样的事情?这似乎是一个常见的情况...

iterator 函数有效地完成了 lodash 的 partialRight 函数所做的事情,即部分地将最右边的参数应用于函数。

所以在上面的例子中,_.partialRightiterator 的替代品:

return listPersons().then(_.partialRight(_.map, nameConverter));

注意我在问题中添加的评论错误地使用了 curryRight 而它应该是 partialRightcurryRight 类似,但 returns 一个函数,其中参数在函数首次柯里化后应用:

let curriedConverter = _.curryRight(_.map);
curriedConverter(nameConverter)

或(更丑的)

let curriedConverter = _.curryRight(_.map)(nameConverter);

所以迭代器替换就变成了

return listPersons().then(_.curryRight(_.map)(nameConverter))); // yuk