2017-02-14 1 views
0

私はRamdaの新機能です。 Ramadaを使って以下のコードを翻訳する方法を知ってもいいかもしれません keys、keysInのようないくつかの関数が見つかりましたが、どのようにそれらを適用するか分かりません。おかげさまで Ramda:for-inループを宣言的メソッドに変換する

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); 
} 
+0

を結合しています、まだ不純であるように、あなたは(追加 '意味しますかkey、params.data [key]) '? –

+0

Ramdaは、このようなOOシステムで動作するように特に設計されていません。あなたは['invoker'](http://ramdajs.com/docs/#invoker)に役立つものがあるかもしれませんが、私はRamdaがここで多くの助けをすることは期待していません。あなたがしようとしていることは、あなたのオブジェクトの絶え間のない突然変異です、ラムダが回避しようとしているものです。 –

+0

ありがとうございます。私の場合、いくつかアイデアを教えてください:私はAPI呼び出しから "params"を受け取り、FormDataオブジェクトを使ってパラメータを変換する必要があります。 ramdaを正しく適用するために私のコードを変更するにはどうすればいいですか? – user2504831

答えて

1

は@scottが言ったことから従うために、あなたは本当に(特にマップは、fn内から)RAMDA内から副作用を引き起こすのは嫌だが、いくつかの理由であれば、あなたはあなたのような何かを行うことができますする必要があり次:呼び出し元のスコットの提案@使用

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 

、我々は、キーと値をとり、そしてそれらとformData.appendを呼び出すappender機能を構築することができます。ポイントフリーのスタイルを実現するには、かなり面倒です。それはそうのように、もう少し明確にすることができます。

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

これは私たちが後でFORMDATAを提供することが可能になるという利点もあり、appenderながら、それはあまり

関連する問題