Ramda:将for-in循环转换为声明方法

时间:2017-02-14 10:59:35

标签: ramda.js

我是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);
}

1 个答案:

答案 0 :(得分:1)

要了解@scott所说的内容,你真的不想在ramda中引起副作用(特别是在地图fn中),但如果由于某种原因你需要你可以做类似以下的事情: / p>

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的invoker建议,我们可以构建一个appender函数,它接受一个键和一个值,并用这些函数调用formData.append。为了实现无点风格,它最终会变得非常混乱。它可以更加明确如下:

let appender = form => (v, k) => form.append(k, v);
mapObjIndexed(appender(formData))(params.data)

这有一个额外的好处,即允许我们稍后提供formData,所以虽然appender仍然不纯,但它的耦合度较低