2017-02-14 11 views
0

Я новичок в Ramda. Могу ли я узнать, как перевести код ниже, используя Ramda Я нашел некоторые функции, такие как ключи, keysIn, но я понятия не имею, как их применять. Спасибо.Ramda: Переведите цикл «взад-вперед» в декларативный метод

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

ли вы имеете в виду 'Append (key, params.data [key]) '? –

+0

Ramda специально не предназначен для работы с такими системами OO. Вы можете найти что-то полезное с ['invoker'] (http://ramdajs.com/docs/#invoker), но я не стал бы рассчитывать на то, что Ramda предлагает большую помощь здесь. Обратите внимание, что то, что вы пытаетесь сделать, это постоянная мутация вашего объекта, чего Рамда пытается избежать. –

+0

Спасибо. Не могли бы вы дать некоторое представление о моем случае: я получил «params» из вызова API, и вам нужно перевести параметры с помощью объекта FormData. Как я могу изменить свой код, поэтому примените ramda правильно? – user2504831

ответ

1

Чтобы следовать из того, что @scott сказал, вы не хотите, чтобы вызвать побочные эффекты внутри ramda (особенно изнутри отображения 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 

Использование @ предложение Скотта запустившего, мы можем построить appender функцию, которая принимает ключ и значение, и вызывает formData.append с теми. Тем не менее, для достижения бессмысленного стиля это становится довольно грязным. Это может быть немного более явным образом:

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

Это имеет дополнительное преимущество, что позволяет нам обеспечить FormData позже, поэтому пока appender еще нечистым, он менее связан