【发布时间】:2019-05-04 17:41:35
【问题描述】:
我正在构建一个 React 应用程序。我正在使用 Ramda 来帮助我进行函数式编程。
如果你想看完整的代码,我也在StackExchange Code Review寻求帮助。
不过,对于 Stack Overflow,只有一部分是相关的。
如何使用 Ramda 根据对象的其他值更改对象的特定值?我使用mapObjIndexed,它在进程中映射所有键。
上下文:我有一个对象,它代表一个带有几个键的联系人,这些键都是字符串。该对象始终有一个名为contactDetails 的键。我想根据对象的 tel、bday 和 email 键的值计算 contactDetails 的值。
如果一个联系人在函数之前是这样的:
{
firstName: 'John',
lastName: 'Doe',
contactDetails: '',
tel: '555-55-5555',
bday: '',
email: 'john@doe.com'
}
之后应该是这样的:
{
firstName: 'John',
lastName: 'Doe',
contactDetails: 'john@doe.com 555-55-5555',
tel: '555-55-5555',
bday: '',
email: 'john@doe.com'
}
我为此编写的函数如下所示:
R.mapObjIndexed((val, key, obj) =>
key === 'contactDetails'
? R.trim(
R.replace(
/undefined/g,
'',
`${R.prop('bday')(obj)} ${R.prop('tel')(obj)} ${R.prop('email')(
obj
)}`
)
)
: val
),
如您所见,这是一种滥用map 的非常不干净和骇人听闻的方式。有没有更好的方法可以根据对象的其他值在 Ramda 中更改对象的值?
【问题讨论】:
标签: javascript functional-programming ramda.js