Tho*_*enA 3 javascript functional-programming immutable.js
我有一个看起来像这样的列表:
["green", "blue","green","green", "blue", "black"]
Run Code Online (Sandbox Code Playgroud)
如何使用ImmutableJS运算符来计算这些项并获得一个如下所示的Map:
{ green: {name: green, count: 3}, blue:{name: blue, count: 2}, black:{name: black, count: 1}}
Run Code Online (Sandbox Code Playgroud)
我在这里找到了以下函数来做普通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;
}, {})
}
Run Code Online (Sandbox Code Playgroud)
尝试groupBy接下来map.像这样的东西:
list.groupBy(elem => elem).map(arr => {
return {"name" : arr.get(0), "count": arr.size }
})
Run Code Online (Sandbox Code Playgroud)
list.groupBy(elem => elem)将返回一个KeyedSeq颜色字符串作为其键,一个Iterable字符串作为值.它在纯JS中看起来像这样.
{ green: ["green","green","green"], blue:["blue","blue"], black: ["black"]}
Run Code Online (Sandbox Code Playgroud)
然后我们可以映射这些以返回可迭代的大小以及名称,我们应该得到你想要的:
{ green: {name: "green", count: 3}, blue:{name: "blue", count: 2}, black:{name: "black", count: 1}}
Run Code Online (Sandbox Code Playgroud)
当然,如果你想要得到这个,你需要toJS()在最后使用.