2017-09-11 1 views
1

Toutes les idées comment puis-je utiliser transduce de Ramda.js pour le faire fonctionner sans transformations intermédiaires sur les données ((2x filtrage, 1x tri)) pour l'optimisation. Pour l'instant, j'ai trouvé quelque chose comme ça, mais j'ai toujours des problèmes avec l'implémentation de ma solution.Utilisation transduce en JavaScript pour l'optimisation - Transducteurs et Ramda

var numbers = R.range(0, 1000000) 
var transducer = R.pipe(
    R.map(R.add(1)), 
    R.map(R.multiply(2)), 
    R.filter(x => x % 2 === 0) 
) 

R.transduce(transducer, R.add, [], numbers) 
+4

Je ne crois pas sortBy peut être utilisé dans un transducteur (les docs ont tendance à ajouter pour « Agit comme un transducteur si un transformateur est donnée dans la position de la liste. » La fonctions). Sinon, le moyen le plus simple de supprimer la structure de données intermédiaire entre les deux filtres est simplement de combiner le filtre predicate -> (both (propEq ('nom d'utilisateur', nom), propEq ('complete', false)) –

+1

Les transducteurs agréés vous permettent de combiner des opérations sur des éléments individuels, mais le tri opère sur une structure de données plus large. s bien que vous puissiez trier le premier puis trier le second, et ainsi de suite. –

Répondre

2

const func = (data, name) => 
 
    R.sortBy(R.prop('dueDate'), R.transduce(R.compose(
 
      R.filter(R.propEq('username', name)), 
 
      R.filter(R.propEq('complete', false)) 
 
     ), R.flip(R.append), [], data.tasks))