Impossible d’attraper les arguments dans «R.applySpec»: Ramda.js
J'essaye essentiellement d'obtenir le code ci-dessous dans le R.applySpec.
const fn = ({target, count}) => R.unnest (R.zipWith (R.repeat) (target, count))
const Data = {
target : ["a", "b", "c"],
count : [1, 2, 3],
}
const data1= {
result : fn (Data)
}
console.log ( 'data1:', data1.result);// ["a","b","b","c","c","c"]
Ce que je ne parviens pas à comprendre, c'est que les arguments fnduR.applySpec
const data2_applySpec = R.applySpec({
result : R.lift ( R.zipWith ( fn )) ( R.prop ('target'), R.prop ('count'))
})
const data2 = data2_applySpec(Data)
console.log ('data2:', data2);//ERROR
Comment puis-je modifier le fnpour le faire fonctionner? J'utilise Ramda.js. Merci.
REPL
Réponses
Je pense que vous rendez cela plus difficile qu'il ne devrait l'être.
Vous avez déjà applySpecstocké la fonction que vous souhaitez utiliser à l'intérieur fn.
Vous pouvez donc simplement écrire:
const fn2 = applySpec ({
result: fn
})
Ou, si votre seule utilisation de fnest à l'intérieur de cet applySpecappel, alors insérez-le simplement:
const fn3 = applySpec ({
result: ({target, count}) => unnest (zipWith (repeat) (target, count))
})
Et si vous avez un fétiche pour le code sans point, vous pouvez utiliser la technique décrite dans votre article précédent :
const fn4 = applySpec ({
result: compose (unnest, apply (zipWith (repeat)), props (['target', 'count']))
})
(ou la version similaire d'Ori Drori.)
Tous ces éléments sont présentés dans cet extrait.
const fn1 = ({target, count}) => unnest (zipWith (repeat) (target, count))
const fn2 = applySpec ({
result: fn1
})
const fn3 = applySpec ({
result: ({target, count}) => unnest (zipWith (repeat) (target, count))
})
const fn4 = applySpec ({
result: compose (unnest, apply (zipWith (repeat)), props (['target', 'count']))
})
const data = {target : ["a", "b", "c"], count : [1, 2, 3]}
console .log (fn1 (data))
console .log (fn2 (data))
console .log (fn3 (data))
console .log (fn4 (data))
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js"></script>
<script> const {unnest, zipWith, repeat, applySpec, compose, apply, props} = R </script>
Vous pouvez utiliser un tableau de tableaux ([cible, nombre]) R.props, appliquer le tableau de tableau à R.zipWith(repeat), puis aplatir les résultats avec R.unnest:
const { applySpec, pipe, props, apply, zipWith, repeat, unnest } = R
const Data = {
target : ["a", "b", "c"],
count : [1, 2, 3],
}
const data2_applySpec = applySpec({
result: pipe(props(['target', 'count']), apply(zipWith(repeat)), unnest)
})
const result = data2_applySpec(Data)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>