Ramda:将 for-in 循环翻译成声明式方法
Ramda: Translate for-in loop to declarative method
我是 Ramda 的新手。我可以知道如何使用 Ramda 翻译下面的代码吗
我找到了一些函数,比如 keys、keysIn,但我不知道如何应用它们。
谢谢
const params = {
data: {
a: 'aaa',
b: 'bbb',
c: 'ccc',
}
}
let formData = new FormData();
for (let key in params.data) {
formData.append(key, params.data.key);
}
按照@scott 所说的,你不会真的想在 ramda 中产生副作用(尤其是在 map fn 中),但如果出于某种原因你需要,你可以做如下的事情:
const params = {
data: {
a: 'aaa',
b: 'bbb',
c: 'ccc',
}
}
let formData = new FormData();
let appender = flip(invoker(2, 'append'))(R.__, R.__, formData)
mapObjIndexed(appender)(params.data)
formData.get('a') === 'aaa' // -> true
使用@scott 的调用者建议,我们可以构建一个 appender
函数,它接受一个键和一个值,并用它们调用 formData.append
。要实现 point-free 风格,它最终会变得非常混乱。它可以像这样更明确一点:
let appender = form => (v, k) => form.append(k, v);
mapObjIndexed(appender(formData))(params.data)
这有一个额外的好处,就是允许我们稍后提供 formData,所以虽然 appender
仍然不纯,但耦合度较低
我是 Ramda 的新手。我可以知道如何使用 Ramda 翻译下面的代码吗 我找到了一些函数,比如 keys、keysIn,但我不知道如何应用它们。 谢谢
const params = {
data: {
a: 'aaa',
b: 'bbb',
c: 'ccc',
}
}
let formData = new FormData();
for (let key in params.data) {
formData.append(key, params.data.key);
}
按照@scott 所说的,你不会真的想在 ramda 中产生副作用(尤其是在 map fn 中),但如果出于某种原因你需要,你可以做如下的事情:
const params = {
data: {
a: 'aaa',
b: 'bbb',
c: 'ccc',
}
}
let formData = new FormData();
let appender = flip(invoker(2, 'append'))(R.__, R.__, formData)
mapObjIndexed(appender)(params.data)
formData.get('a') === 'aaa' // -> true
使用@scott 的调用者建议,我们可以构建一个 appender
函数,它接受一个键和一个值,并用它们调用 formData.append
。要实现 point-free 风格,它最终会变得非常混乱。它可以像这样更明确一点:
let appender = form => (v, k) => form.append(k, v);
mapObjIndexed(appender(formData))(params.data)
这有一个额外的好处,就是允许我们稍后提供 formData,所以虽然 appender
仍然不纯,但耦合度较低