gpt4 book ai didi

javascript - 如何使用 ramda js 对对象进行排序

转载 作者:行者123 更新时间:2023-12-03 00:24:44 25 4
gpt4 key购买 nike

我想对以下对象进行排序,

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"}}

最佳答案

您的尝试已经很接近了,您只需要为在对象值中找到的每个对象递归调用 map 即可。

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' }

const eY = R.equals('Y')
const isSelected = R.compose(R.all(eY), R.values)
const groupValue = R.when(isSelected, R.always('Y'))

const fn = objOrString => R.pipe(
R.unless(R.is(String), R.map(fn)),
R.unless(R.is(String), groupValue),
R.unless(R.is(String), R.filter(R.either(R.is(Object), R.equals('Y'))))
)(objOrString)

console.log(fn(form))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

关于javascript - 如何使用 ramda js 对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com