如何使用 ImmutableJS 计算列表中的项目?
How to count items in List with ImmutableJS?
我有一个如下所示的列表:
["green", "blue","green","green", "blue", "black"]
我如何使用 ImmutableJS 运算符来计算这些项目并获得一个如下所示的地图:
{ 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)
将 return 一个 KeyedSeq
,颜色字符串作为键,Iterable
个字符串作为值。在纯 JS 中看起来像这样。
{ green: ["green","green","green"], blue:["blue","blue"], black: ["black"]}
然后我们可以将这些映射到 return 可迭代对象的大小以及名称,我们应该得到你想要的:
{ green: {name: "green", count: 3}, blue:{name: "blue", count: 2}, black:{name: "black", count: 1}}
当然,如果你想得到那个,你需要在最后使用 toJS()
。
您也可以使用混合解决方案:
list.toJS().length
我有一个如下所示的列表:
["green", "blue","green","green", "blue", "black"]
我如何使用 ImmutableJS 运算符来计算这些项目并获得一个如下所示的地图:
{ 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)
将 return 一个 KeyedSeq
,颜色字符串作为键,Iterable
个字符串作为值。在纯 JS 中看起来像这样。
{ green: ["green","green","green"], blue:["blue","blue"], black: ["black"]}
然后我们可以将这些映射到 return 可迭代对象的大小以及名称,我们应该得到你想要的:
{ green: {name: "green", count: 3}, blue:{name: "blue", count: 2}, black:{name: "black", count: 1}}
当然,如果你想得到那个,你需要在最后使用 toJS()
。
您也可以使用混合解决方案:
list.toJS().length