如何在lodash / underscore中强制arity?

时间:2014-09-15 15:26:20

标签: javascript underscore.js lodash

我经常发现自己想在map迭代器中强制使用一元arity,这样只传递第一个参数 - item值 - 省略键/索引和迭代器,以避免重载组合函数。

我需要这种情况的一个例子如下:

var parts = [
    'projectIds',
    [ 1, 6, 7 ],
    'properties',
    [ 'name', 'startDate' ]
];

function pathFrom( parts ){
    return _( parts )
        // This is the tricky bit:
        .map( _.partialRight( _.result, 'toString' ) )
        .join( '/' )
        .valueOf();
};

alert( pathFrom( parts ) );

我想要的输出是projectIds/1,6,7/properties/name,startDate,但它实际上最终为p/6/o/,因为传递了迭代索引并从值中取出p'projectIds'[0]6[1,6,7][1]o'properties'[2],等等。

如何锁定地图迭代器的arity,以便只拉出第一个参数,其余的被丢弃?

2 个答案:

答案 0 :(得分:1)

仅供参考Lodash现在有一个_.ary功能可以完成您正在寻找的功能。

var path = require('path');
[ 'foo', 'bar', 'baz' ].map(_.ary(path.resolve, 1)); 
// => [ '/<cwd>/foo', '/<cwd>/bar', '/<cwd>/baz' ]

答案 1 :(得分:0)

除了使用具有明确arity的函数表达式之外,我认为除了使用函数表达式之外,还有一个很好的解决方案。 Underscore / Lodash没有修复函数arity的方法,这使得partial和特别是partialRight函数难以使用。您可能需要查看Ramda

但是,对于您的用例,您无论如何也不需要这样的用例。适当的工具是_.invoke

function pathFrom(parts) {
    return _.invoke(parts, 'toString').join('/');
}