0
votes

Ramda. Beaspass avec le résultat au lieu de booléen

J'ai une réponse de WordPress Rest API. La poste peut avoir une image en vedette et il peut s'agir de différentes tailles. Je veux prendre une grosse image. Si cela n'existe pas, puis de taille moyenne et petite.

const data = {
  sizes: {
    small: {
      source: 's.jpg',
    },
    medium: {
      source: 'm.jpg',
    },
  }
};

const prioritizedSizes = ['large', 'medium', 'small'];
const possiblePaths = map((size) => path(['sizes', size, 'source']), sizes)


0 commentaires

5 Réponses :


0
votes

Enfin, j'ai changé un bit original anypass et voici ce que j'ai obtenu: xxx

exemple: xxx


1 commentaires

Ceci est loin d'être déclaratif, cela implique de nombreux flux de contrôle impératifs et mutations. Personnellement, je ne voudrais pas y aller car il a également un O (n ^ 2) la complexité due à tandis que est imbriqué dans un Réduire la fonction . S'il vous plaît, regardez d'autres approches qui n'exigent pas cela.



1
votes

extraire tous les éléments dans l'ordre de tailles code>, retirez les éléments manquants ( non défini code>), et si le 1er élément n'est pas non défini code>, prenez la source code>:

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>


0 commentaires

0
votes

Je pense qu'il est important de clarifier l'utilisation de anverspass code> en premier. Vous ne pouvez pas l'utiliser pour vérifier la vérité d'une chose et renvoyer quelques informations à ce sujet en même temps.

Prenons ces exemples: le prédicat peut renvoyer une valeur non booléenne, mais elle sera lancée en un par Anypass Code>: P>

const size = compose(path, flip(insert(1))(['sizes', 'source']));

const findSize = compose(find(complement(isNil)), ap([size('large'), size('medium'), size('small')]), of);

findSize({
  sizes: {
    small: {
      source: 's.jpg',
    },
    medium: {
      source: 'm.jpg',
    },
  }
})


0 commentaires

0
votes

D'autres ont expliqué pourquoi anbas code> ne fera pas pour vous ici.

Je pense que la version la plus directe utiliserait trouver code>, comme vous essayez de trouver le Première match entre la liste des priorités. Voici une solution assez simple: p>

p>

(priorities) => (data) => find (has (__, data.sizes), priorities)


0 commentaires

0
votes

Vous pouvez l'écrire récursivement, Quelque chose comme le texte suivant FindImage code>

  1. Prendre Taille Code> de gauche (haute priorité) li>
  2. Traverse DATA CODE> jusqu'à Taille CODE> ou NULL CODE> LI>
  3. Si trouvé retour trouvé code> li>
  4. elseIf longueur queue FindImage (queue) code> li>
  5. retour null code> li> ol>

    p>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>


0 commentaires