使用时 groupby
从 lodash 每个组的键假定一个字符串而不是它的原始类型
例子:
let p1 = { age: 50 };
let p2 = { age: 130 };
let p3 = { age: 25 };
let groups = _.groupBy([p1, p2, p3], (p: any) => p.age);
let sortedKeys = _.keys(groups).sort();
for (let key of sortedKeys) {
console.log(key);
}
输出:130 string
25 string
50 string
我知道我可以通过修改 sort() 来解决这个问题
_.keys(groups).sort((k1:any, k2:any) => { return k1-k2; });
但不应该是 number
的原始类型(在本例中为 groupby
)关键是维护?
最佳答案
我不知道为什么 lodash groupBy
不支持 number
或 Symbol
键。定义一个通用的 KeyType
似乎是可行的基于键选择器功能(甚至属性名称)。也许只是在等待有人向 @types/lodash
PR 提供更好的类型定义。 .
与此同时,我为我的项目写了这个(我只需要函数变体):
const groupByNumber = <T>(data: T[], keySelector: ((k: T) => number)): Record<number, T[]> => {
const result: Record<number, T[]> = {}
for (const datum of data) {
const key = keySelector(datum)
if (!(key in result)) {
result[key] = [datum]
} else {
result[key].push(datum)
}
}
return result
}
您将无法链接,但可以嵌套:const data = mapValues(groupByNumber(detections, d => d.hour), ds => ds.length)
我相信它可以改进,但总比没有好,希望它能引发更多的讨论和迭代:)
关于javascript - lodash groupby 使用字符串键而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653474/