2009-09-25 4 views
1

J'ai un peu de javascript que j'utilise pour calculer l'échelle y d'un graphique. J'ai besoin d'ajuster l'échelle en fonction de la valeur. Cela fonctionne mais semble vraiment verbeux. Y a-t-il une manière plus simplifiée de faire ceci?Rationaliser Javascript pour calculer des gammes

if (maxValue <= 20000){ 
    chartMaxY = 20000 
}  
if (maxValue <= 10000){ 
    chartMaxY = 10000 
}  
if (maxValue <= 5000){ 
    chartMaxY = 5000 
}  
if (maxValue <= 2500){ 
    chartMaxY = 2500 
} 
if (maxValue <= 1000){ 
    chartMaxY = 1000 
} 
if (maxValue <= 500){ 
    chartMaxY = 500 
}  
if (maxValue <= 250){ 
    chartMaxY = 250 
}   
if (maxValue <= 100){ 
    chartMaxY = 100 
} 
if (maxValue <= 50){ 
    chartMaxY = 50 
} 
if (maxValue <= 10){ 
    chartMaxY = 10 
} 

Répondre

3

Même chose, peut-être plus succincte selon votre style de programmation.

var keys = [10, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 20000]; 

for (var i=0; i<keys.length; i++) { 
    if (maxValue <= keys[i]) { 
     chartMaxY = keys[i]; 
     break; 
    } 
} 

L'ordre inverse des valeurs clés provoque maxValue seulement être réglé une fois, mais notez que cela ne modifie pas les valeurs> 20000 (mais ne fit d'origine)

+0

Le vôtre est certainement un meilleur algorithme que le mien. – cwallenpoole

+0

Merci, Chadwick. J'ai appris quelque chose! –

2

Pourquoi ne pas utiliser une boucle for?

var vals = [ 20000, 10000, 5000, 2500, 1000, 500, 250, 100, 50, 10 ]; 

for(var i = 0; i < vals.length; i++) 
{ 
    if(maxValue > vals[ i ]) 
    { 
     break; 
    } 
    else 
    { 
     chartMaxY = vals[ i ]; 
    } 
} 
+0

Merci, Chris! Je vous en suis reconnaissant. –

4

est ici une solution sans une boucle qui échelle à 1, 2.5, 5, 10, 2.5, ... pour des valeurs arbitrairement grandes:

function maxScale(x) { 
    var l = Math.log(x)/Math.LN10, p = Math.floor(l), q = Math.pow(10, l - p); 
    return Math.pow(10, p) * (q > 2.5 ? (q > 5 ? 10 : 5) : 2.5); 
} 
+0

4 lignes est nettement plus succincte que la mienne. Merci! –

+0

+1 pour une solution algorithmique, par opposition aux valeurs codées en dur. – Chadwick