gpt4 book ai didi

javascript - ramda js 使用 reduce 连接值

转载 作者:行者123 更新时间:2023-11-29 18:44:47 24 4
gpt4 key购买 nike

我有一组数据将被转换成一个字符串。我已经创建了进行转换的功能。我的问题是编写此函数以使其更具可读性的最佳方式是什么?我不想有多个 if/else 语句。

const data = [
"hello",
{name: "Bob"},
"and",
{name: "Fred"},
"How are you guys today?",
]

const isString = R.is(String)
const isObject = R.is(Object)

const getName = R.prop('name')

const toPureString = R.reduce(
(result, value) => {
if (isString(value)) {
return `${result}${value} `
}
if (isObject(value)) {
return `${result}${getName(value)}`
}
return result
}, "")

toPureString(data)
// hello Bob and Fred How are you guys today?

最佳答案

我会做这样的事情:

const {compose, join, map, unless, is, prop} = R
const data = ['hello', {name: 'Bob'}, 'and', {name: 'Fred'}, 'How are you guys today?']

const transform = compose(join(' '), map(unless(is(String), prop('name'))))

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

unless是一个简化的 if-else,它返回原始值,除非谓词返回 true,在这种情况下它首先应用转换函数。 (when 类似,只是它在谓词为真时应用转换。)所以这分两步进行,首先将所有内容转换为一致的格式,纯字符串,然后将它们组合起来。

这对你来说可能读起来更好,但它们是完全等价的:

const transform = pipe(
map(unless(is(String), prop('name'))),
join(' '),
)

关于javascript - ramda js 使用 reduce 连接值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54618384/

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