我正在尝试按名称对这个对象进行分组,所以很好,我可以将所有名称'duval'与'lulu'区分开来:
const groupName = R.groupBy(R.prop('name'), [data]);
但这不会起作用:
let data = {
benj: {
content : undefined,
name : 'duval',
complete: false,
height : 181
},
joy: {
content : undefined,
name : 'duval',
complete: true
},
kaori: {
content : undefined,
name : 'lulu',
complete: true
},
satomi: {
content : undefined,
name : 'lulu',
complete: true
}
}
我应该更改对象的格式,还是有办法在这种对象中进行更改?
答案 0 :(得分:2)
将[data]
传递给groupBy
并没有多大帮助。您想要对包含单个项目的列表进行分组。该项目具有“bennj”和“joy”等属性而不是“name”这一事实只是问题的一部分。
如果这个输出很有用,你可以得到一些可行的东西:
{
duval: {
benj: {
content: undefined,
name: "duval",
complete: false,
height: 181
},
joy: {
content: undefined,
name: "duval",
complete: true
}
},
lulu: {
kaori: {
content: undefined,
name: "lulu",
complete: true
},
satomi: {
content: undefined,
name: "lulu",
complete: true
}
}
}
但它涉及的更多:
compose(map(fromPairs), groupBy(path([1, 'name'])), toPairs)(data)
toPairs
将数据转换为以下元素列表:
[
"benj",
{
complete: false,
content: undefined,
height: 181,
name: "duval"
}
]
然后groupBy(path[1, 'name'])
通过查找此列表中索引1处对象的名称来执行您要查找的分组。
最后map(fromPairs)
会将这些列表列表转换回对象。
这不是一个特别优雅的解决方案,但是当你想对不是列表的东西进行列表处理时,它是相当典型的。