【发布时间】:2019-06-05 22:09:23
【问题描述】:
我想对下面的对象进行排序,
const form = {
A_ALL: {A1_ALL: { A1_ONE: 'Y', A2_TWO: 'Y', A3_THREE: 'Y'}, A2: {A2_FOUR: 'Y', A2_FIVE: 'N', A2_SIX: 'Y'}, A3: 'Y', A4: 'N'},
B_ALL: {B1_ALL: { B1_ONE: 'Y', B1_TWO: 'Y', B1_THREE: 'Y'}, B2: {B2_FOUR: 'Y', B2_FIVE: 'Y', B2_SIX: 'Y'}, B3: 'Y', B4: 'Y'},
C_ALL: {XX: 'Y', YY:'Y'},
D: 'Y',
E: 'N'
}
我正在实现一个带有嵌套复选框的表单,其值可以是“Y”或“N”。我只想捕获“Y”复选框,如果所有子复选框都是“Y”,我想丢弃它们并只获取父复选框。以上是具有所有复选框值的对象。我希望将对象排序为:
{
A_ALL: {A1_ALL: 'Y', A2: {A2_FOUR: 'Y', A2_SIX: 'Y'}, A3: 'Y'},
B_ALL : 'Y',
C: 'Y',
D: 'Y'
}
到目前为止,我的代码如下所示:
const FORM = ({ A1_ALL: { a: 'Y', b: 'Y', c: 'Y' }, B1_ALL: { a: 'Y', b: 'Y', c: 'N' }, C1_ALL: { a: 'Y', b: 'Y', c: 'Y' }, })
const eY = equals('Y')
const isSelected = compose(all(eY), values)
const groupValue = when(isSelected, always('Y'));
const formValue = map(groupValue) formValue(FORM) Result is {A1_ALL: "Y", C1_ALL: "Y", B1_ALL: {a: "Y", b: "Y", c: "N"}}
【问题讨论】:
-
到目前为止你尝试了什么?
-
我使用 Ramda 实现了以下代码, const FORM = ({ A1_ALL: { a: 'Y', b: 'Y', c: 'Y' }, B1_ALL: { a: ' Y', b: 'Y', c: 'N' }, C1_ALL: { a: 'Y', b: 'Y', c: 'Y' }, }) const eY = equals('Y') const isSelected = compose(all(eY), values) const groupValue = when(isSelected, always('Y')); const formValue = map(groupValue) formValue(FORM) 结果是 {A1_ALL: "Y", C1_ALL: "Y", B1_ALL: {a: "Y", b: "Y", c: "N"}}跨度>
-
假设你的结果是一个递归包含所有
Ys的对象,最终结果不应该只是字符串Y吗?
标签: javascript sorting filtering ramda.js