javascript - 如何使用 ImmutableJS 计算列表中的项目?

标签 javascript functional-programming immutable.js

我有一个如下所示的列表:

["green", "blue","green","green", "blue", "black"]

我如何使用 ImmutableJS 运算符来计算这些项目并获得一个看起来像这样的 map :

{ green: {name: green, count: 3}, blue:{name: blue, count: 2}, black:{name: black, count: 1}}

我找到了以下函数 here在纯 JS 中做到这一点,那么我怎么能用 ImmutableJS 实现呢?

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 的字符串作为值(value)。在纯 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()

关于javascript - 如何使用 ImmutableJS 计算列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35895586/

相关文章:

javascript - 如何将 Buffer 对象转换为 Node.js 中的文件?

python - 过滤掉列表中稳定值的更多 pythonic 方法

javascript - 字符串到数字然后返回到 JavaScript 中的字符串加密/解密

javascript - 如何动态设置javascript对象的属性

list - 如何在 Erlang 中编写模拟?

javascript - 实现教堂数字和后继函数

javascript - 不可变的 js 从列表映射中创建列表

javascript - 如何检查两个 ImmutableJS Map 是否具有相同的键?

javascript - 根据属性值从 ImmutableJS 列表中删除对象

javascript - 单击面板栏本身上的按钮时如何防止 Kendo 面板栏崩溃