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)
5 Réponses :
Enfin, j'ai changé un bit original exemple: p> anypass code> et voici ce que j'ai obtenu:
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) code> la complexité due à
tandis que code> est imbriqué dans un
Réduire la fonction code> . S'il vous plaît, regardez d'autres approches qui n'exigent pas cela.
extraire tous les éléments dans l'ordre de p> 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>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
Je pense qu'il est important de clarifier l'utilisation de Prenons ces exemples: le prédicat peut renvoyer une valeur non booléenne, mais elle sera lancée en un par Anypass Code>: P> 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.
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',
},
}
})
D'autres ont expliqué pourquoi Je pense que la version la plus directe utiliserait p> anbas code> ne fera pas pour vous ici.
trouver code>, comme vous essayez de trouver le Première match entre la liste des priorités. Voici une solution assez simple: p>
(priorities) => (data) => find (has (__, data.sizes), priorities)
Vous pouvez l'écrire récursivement,
Quelque chose comme le texte suivant p> FindImage code>
Taille Code> de gauche (haute priorité) li>
DATA CODE> jusqu'à
Taille CODE> ou
NULL CODE> LI>
retour trouvé code> li>
elseIf longueur queue FindImage (queue) code> li>
retour null code> li>
ol>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>