对象属性的通用分组
Generic Grouping of objects properties
我正在尝试按名称对这个对象进行分组,所以我可以很好地将所有名称 '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
}
}
我应该更改对象的格式,还是有办法在这种对象中进行更改?
将 [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)
将把这些列表的列表变回对象。
这不是一个特别优雅的解决方案,但当您想对不是真正列表的内容进行列表处理时,它是相当典型的。
我正在尝试按名称对这个对象进行分组,所以我可以很好地将所有名称 '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
}
}
我应该更改对象的格式,还是有办法在这种对象中进行更改?
将 [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)
将把这些列表的列表变回对象。
这不是一个特别优雅的解决方案,但当您想对不是真正列表的内容进行列表处理时,它是相当典型的。