J'ai une gamme de valeurs comme, par exemple, puis je souhaite associer une valeur d'échelle alors je avoir une entrée Ce que je veux est le Valeur d'échelle em> liée à ce numéro.
Ainsi, par exemple, si: p> Comment puis-je créer une fonction comme ça? J'imagine une fonction comme celle-là: p> toutes les valeurs Voici des exemples, je veux que tout fonctionne avec toutes les autres valeurs. P> Je ne fais pas Savoir comment faire à cela. J'ai besoin d'aide ... p> p> [0, 100] = [Minvalue, maxvalue] code> et le nombre de bandes, par exemple
bands_number = 5 code> .
Donc, je peux obtenir ces bandes:
(i + 1) / bands_number code> où
i code> est l'index d'une boucle hypothétique. p>
n code> dont la valeur est dans la plage
[Minvalue, maxvalue] = [0, 100] code>. P>
3 Réponses :
Vous pouvez utiliser une fonction native quelque chose comme ceci: p> p> array.map code> pour mapper chaque valeur.
const vals = [
[0, 20],
[21, 40],
[41, 60],
[61, 80],
[81, 100],
];
const BANDS_NUMBER = 5;
const result = vals.map((range, index) => (index + 1) / BANDS_NUMBER);
console.log(result);
Vous pouvez prendre une formule qui prend la plage et la fente et renvoie une valeur normalisée.
en raison de la plage, qui est un peu trop long (la dernière valeur est incluse dans l'intervalle), vous avez besoin d'un Vérifiez la dernière valeur et évitez de recevoir la valeur suivante, en dehors de l'intervalle recherché. P>
p>
function normalize(min, max, bands, n) { return n === max ? 1 : Math.floor(1 + ((n - min) / (max - min)) * bands) / bands; } // 0.2 0.2 0.4 0.4 0.8 1 1 console.log(...[0, 10, 20, 35, 68, 99, 100].map(normalize.bind(null, 0, 100, 5)));
Merci mais ce que je veux, c'est un peu différent. Je préfère que votre fonction est devenue la fonction normalisant (Minvalue, maxvalue, bandsnumber, n) {...} code>
Nina Scholz's Réponse est faux. Sa fonction normale renvoie p> 0.4 code> au lieu de
0.2 code> pour la valeur
20 code>:
const index = (min, max, bands, n) =>
Math.floor(bands * (n - min) / (max - min + 1));
const value = (min, max, bands, n) =>
(index(min, max, bands, n) + 1) / bands;
const result = n => value(0, 100, 5, n);
console.log(result(0), result(20)); // 0.2 0.2
console.log(result(21), result(40)); // 0.4 0.4
console.log(result(41), result(60)); // 0.6 0.6
console.log(result(61), result(80)); // 0.8 0.8
console.log(result(81), result(100)); // 1 1
Le premier ensemble contient 21 articles tandis que les autres ont 19, est-ce normal?
@ Kévinbibollet premier défini contient 21, seconde dans les derniers ensembles contient 20, pas 19.
@ Kévinbibollet vous, ce n'est pas un problème si les ensembles ne contiennent pas le même nombre d'éléments
Cela ne pose pas de problème que les ensembles ne contiennent pas le même nombre d'éléments, mais vous devez alors indiquer comment vous souhaitez distribuer la plage. Dans votre exemple, vous décidez que l'élément supplémentaire appartient au premier ensemble. Est-ce toujours le cas? Et s'il y a 2 ou plusieurs éléments supplémentaires?