0
votes

Trouvez l'index des points d'arrêt au lieu de plusieurs déclarations

J'essaie de générer des tailles en fonction d'une hauteur de personnes. Pour le moment, mon programme fonctionne, mais j'aimerais trouver un moyen plus court pour obtenir la taille au lieu d'utiliser tous ces sinon si code>. Je voudrais boucler à travers des "points d'arrêt" pour trouver l'index correspondant.

C'est mon code d'origine + ce que j'avais à l'esprit. P>

p>

const sizes = ['xxs', 'xxs or xs', 'xs', 'xs or s'] // Goes on for all sizes...

function generateSize(height) {
    let size;

    if (height < 142) {
        size = sizes[0];
    } else if (height >= 142 && height < 148) {
        size = sizes[1];
    } else if (height >= 148 && height < 154) {
        size = sizes[2];
    } else if (height >= 154 && height < 160) {
        size = sizes[3]; // Goes on for all sizes...
    } else {
        size = 'larger...';
    }

    return size;
}



// Example of what I had in mind.
const heightBreakpoints = [142, 148, 154, 160];
function getByBreakpoints(breakpoints, height){ // Part where I am stuck.
    let index;
    // Loop through breakpoints...
    return index;
}
const sizeIndex = (getByBreakpoints(heightBreakpoints, 158));
const s = sizes[sizeIndex];


3 commentaires

Il semble que vos options de hauteur diffèrent de 6 à chaque fois (148-142 = 6; 154-148 = 6; etc.). Si tel est le cas, utilisez simplement une boucle.


@Jaynyxed No. Si tel est le cas, ils sont équidistants, il faut utiliser une simple division. Aucune boucle nécessaire.


" // quelque chose comme ça. " - Oui, c'est bon! Pouvez-vous nous montrer votre tentative de Utilisation d'une boucle , s'il te plaît? Où es-tu collé exactement?


3 Réponses :


-1
votes
if(height<160){
height-=142;
if(height<0){size=sizes[0]}
else{
size=sizes[(hieght)%6]
}
}
else{
size='larger...'
}
check if this works in all cases I am sleepy

0 commentaires

0
votes

Je pense que vous pouvez simplifier cela considérablement en modifiant votre structure de données de départ. Et si nous avions un éventail d'objets qui attachent ensemble la taille et son point d'arrêt:

const sizeMap = [
    { maxHeight: 142, size: 'xxs' },
    { maxHeight: 148, size: 'xxs or xs' },
    { maxHeight: 154, size: 'xs' },
    { maxHeight: 160, size: 'xs or s' },
]

const getSize = height => sizeMap.find(item => height < item.maxHeight).size

console.log(getSize(143))


1 commentaires

@ B4ndy a fait cela vous aident?



0
votes

 const sizes = ['xxs', 'xxs or xs', 'xs', 'xs or s', "even another one here"]
// Goes on for all sizes...

function generateSize(height){
    let size;
    let left = 142;
    let right = 142;
    // Initialize the variables for comparison
    // Left and right comparison based on position of "&"
    // This is just user-defined
    for(var i = 0; i < sizes.length; i++){
    	  if(height < right){
    	  	size = sizes[i];
    	  	return size;
    	  }
    	  else {
    	  	  // add counter from here
    	  	  // This takes us to the next item in the array
    	  	  i += 1;
    	  	  // add right comparison with intervals of 6
    	    	right += 6;
            if(height >= left && height < right){
            	  size = sizes[i];
        	      return size;
            }
            else {
            	// add left comparison with intervals of 6
            	left += 6;
            	// revert the counter to its initial value
            	i -= 1;
            }
        }
    }
}
console.log("First: " + generateSize(141))
console.log("Second: " + generateSize(147))
console.log("Third: " + generateSize(153))
console.log("Fourth: " + generateSize(159))
console.log("Last: " + generateSize(161));
// Note this 161, which will return the new last value in the array


0 commentaires