我经常发现自己想要map
迭代器中的强制一元变量,以便仅传递第一个参数(项目值)(省去键/索引和迭代器),以避免重载组合函数。
下面是我需要这种情况的一个示例:
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
is 'projectIds'[0]
,6
is [1,6,7][1]
,o
is'properties'[2]
等)中抽出。
如何锁定映射迭代器的Arity,以便仅通过第一个参数,而其余参数则被丢弃?
除了使用带有显式Arity的函数表达式外,我认为您的问题没有很好的解决方案。Underscore / Lodash没有解决函数通用性的方法,这使得它们partial
,尤其是partialRight
函数难以使用。您可能想看看Ramda。
但是,对于您的用例,无论如何您都不需要这样。合适的工具是_.invoke
:
function pathFrom(parts) {
return _.invoke(parts, 'toString').join('/');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句