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 C'est mon code d'origine + ce que j'avais à l'esprit. P> p> sinon si code>. Je voudrais boucler à travers des "points d'arrêt" pour trouver l'index correspondant.
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 Réponses :
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
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))
@ B4ndy a fait cela vous aident?
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
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. Code> i>" - 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?