Underscore的groupBy函数在Lodash中的等价实现是什么?
Lodash中与Underscore groupBy等价的方法
别担心,Lodash原生就有_.groupBy()函数,它和Underscore的groupBy功能完全一致——你之前选错方法啦,_.keyBy()的设计逻辑本来就是当多个元素匹配同一个键时,只保留最后一个元素,而groupBy才是把所有匹配的元素收集起来的分组工具,这正是你需要的。
直接使用_.groupBy()的示例
对应你给出的例子,Lodash的写法和Underscore几乎完全一样:
var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}]; const groupedResult = _.groupBy(stooges, 'age');
返回结果是:
{ "40": [{name: 'moe', age: 40}], "50": [{name: 'larry', age: 50}], "60": [{name: 'curly', age: 60}] }
如果需要单个值而非数组(匹配你示例的返回结构)
这里提一句:Underscore的groupBy实际上也是返回数组结构的,你示例里的返回可能是笔误。但如果确实需要每个键对应单个对象(比如你能确保每个age值唯一),可以在groupBy之后搭配_.mapValues()提取数组的第一个元素:
const singleValueResult = _.mapValues(_.groupBy(stooges, 'age'), group => group[0]);
这样就能得到你示例里的结构:
{ "40": {name: 'moe', age: 40}, "50": {name: 'larry', age: 50}, "60": {name: 'curly', age: 60} }
内容的提问来源于stack exchange,提问作者anubysh
相关产品推荐
相关产品推荐

