javascript - lodash groupby 使用字符串键而不是数字

标签 javascript lodash

使用时 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不支持 numberSymbol键。定义一个通用的 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/

相关文章:

javascript - CasperJS:在代码中配置代理选项

javascript - 蜘蛛猴壳。是否可以动态加载共享库?

JavaScript splice() 迭代时未定义索引

Lodash Wrapper 对象上的 Javascript 划分

javascript - 两个物体的深度差异

javascript - Lo-Dash _.has nested inside _.every 没有返回我所期望的

javascript - 在 `state.tree` 中写入 `state.xxxReducer.tree` 而不是 `mapStateToProps` (react redux)

javascript - Angular js 模型值变化没有反射(reflect)在 ui 中

javascript - 在 jquery 中如何在发送 ajax 请求后调用函数?

javascript - _.attempt() 返回一个错误,而 try/catch 则没有返回错误