我经常发现自己想在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,以便只拉出第一个参数,其余的被丢弃?
答案 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('/');
}