2011-12-02 15 views
3

Ok, je ne sais pas comment mettre cela en bref.Déterminer un plus grand nombre et diviser

Voici mon code:

var ratio, input={w:100,h:50}; 
if(input.w <= input.h) ratio = input.h/input.w; 
else     ratio = input.w/input.h; 

Question: Y at-il plus vite, mieux, "moins de code nécessaire" façon de calculer ratio? Que si/else déclarations.

Merci!

+1

Vous pouvez * * également trier d'abord: 'var = trié [input.w, input.h] .Sort(), rapport = trié [1 ]/trié [0] '. – pimvdb

Répondre

9

Vous pouvez utiliser l'opérateur conditionnel ternaire. Syntaxe:

condition ? (statement if true) : (statement if false); 

Dans votre cas:

ratio = (input.w <= input.h) ? (input.h/input.w) : (input.w/input.h); 

EDIT:

Ce n'est pas plus rapide que votre solution, juste plus rapide à écrire. Je déconseille l'utilisation:

var ratio = Math.Max(input.w, input.h)/Math.Min(input.w, input.h) 

qui permettra de comparer les chiffres deux fois (une fois dans Math.Max, une fois Math.Min) et serait plus lent.

+0

Dans la version actuelle de chrome, la solution acceptée est non seulement la faible performance sage, il est également moins lisible. alors que le conseil d'aller contre le max min est actuellement en chrome 28 le plus rapide. –

2

Smaller pas nécessairement plus rapide:

var ratio, input = {w:100, h:50}; 
ratio = input.w <= input.h ? input.h/input.w : input.w/input.h; 
6
var ratio = Math.max(input.w, input.h)/Math.min(input.w, input.h) 

une autre [peut-être plus efficace]:

var ratio = Math.max(input.w/input.h, 1/input.w/input.h); 

encore plus efficace que ternaire:

var ratio = w/h ; 
ratio = ratio > 1 && ratio || 1/ratio 
+2

Ne serait-ce pas comparer les chiffres deux fois, par opposition à une fois? –

+0

... et faites deux appels de fonction pour le faire. – Pointy

+0

Notez également qu'il va lancer une erreur de syntaxe ... les méthodes sont 'max' et' min' (minuscule) –

2

Que diriez-vous

ratio = Math.max(input.w, input.h)/Math.min(input.w, input.h) 
+0

N'est-ce pas moins efficace, car il compare les numéros deux fois? –

+0

Oui c'est vrai, mais personnellement (en dehors de quelque chose d'intensif comme une animation) je ne m'inquiéterais pas de quelques microsecondes –

+0

Ils s'additionnent rapidement :) – Asken

1

Vous pouvez utiliser l'opérateur ternaire:

var ratio = (input.w <= input.h ? (input.h/input.w) : (input.w/input.h)); 
Questions connexes