如何使用不可变JS对列表中的项目进行计数
How to count items in List with ImmutableJS?
我有一个列表,看起来像这样:
["green", "blue","green","green", "blue", "black"]
如何使用不可变JS运算符来计算这些项目并获得如下所示的Map:
{ green: {name: green, count: 3}, blue:{name: blue, count: 2}, black:{name: black, count: 1}}
我在这里找到了以下函数,可以在普通 JS 中做到这一点,那么我如何使用不可变 JS 实现这一点呢?
export const countOccurances = obj => {
return obj
.reduce((counter, x) => {
if (counter.hasOwnProperty(x)) {
counter[x].count = counter[x].count + 1
} else {
counter[x] = {name: x, count: 1}
}
return counter;
}, {})
}
尝试groupBy
后跟map
。像这样:
list.groupBy(elem => elem).map(arr => {
return {"name" : arr.get(0), "count": arr.size }
})
list.groupBy(elem => elem)
将返回一个KeyedSeq
,其中颜色字符串作为键,Iterable
字符串作为值。在纯 JS 中看起来像这样。
{ green: ["green","green","green"], blue:["blue","blue"], black: ["black"]}
然后我们可以映射这些以返回可迭代对象的大小以及名称,我们应该得到你想要的:
{ green: {name: "green", count: 3}, blue:{name: "blue", count: 2}, black:{name: "black", count: 1}}
当然,如果你想得到确切的,你需要在最后使用toJS()
。
您也可以使用混合解决方案:
list.toJS().length
相关文章:
- 如何将不可变的js导入angular 2(alpha)
- JavaScript Array unshift() 以一种不可变的方式
- '填隙'当所述项目不在容器中时,将一些项目与引导程序网格对齐
- 将对象从另一个不可变的Map分配给Map是否意味着深度克隆
- 函数在不可变的js和redux存储中
- 如何在JS中创建对象的可变和不可变副本
- jquery ias插件不适用于我的网站,加载更多项目不起作用
- 使用动态键返回不可变状态
- 不可变的JS映射或列表
- 如果项目不匹配,则显示变量
- 如何使用不可变表示此数组重新排序示例
- 不可变,在映射内更新不返回正确的对象
- 不可变的Chai断言错误,而预期的结果等于
- 使用扩展运算符和析构函数运算符修改不可变对象的最短方法是什么
- 如何在类似Om的不可变应用程序状态下对关系数据进行建模
- javascript中不可变的值
- 不可变的js修改所有嵌套的记录
- WebSQL:SQLResultSetRowList 中的返回行是不可变的
- 如何使用不可变JS对列表中的项目进行计数
- 不可变.js:删除集中的项目