2011-12-02 50 views
3

好吧,我不知道如何把這個簡短。確定更大的數字並劃分

這是我的代碼:

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

問: 是否有更快,更好, 「更少的代碼需要」 的方法來計算ratio?比if/else語句。

謝謝!

+1

您*可以*也排序第一:'VAR排序= [input.w,input.h]的.sort(),比=排序[1 ] /排序[0]'。 – pimvdb

回答

9

您可以使用三元條件運算符。語法:

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

你的情況:

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

編輯:

這不是比你的解決方案快,只是快寫。我會建議不要使用:

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

這會比較數字兩次(一次在Math.Max中,一次在Math.Min中)並且會變慢。

+0

在當前版本的Chrome中,可接受的解決方案不僅僅是性能不佳,而且也不太清晰。而反對最大分鐘的建議目前鉻28是最快的。 –

2

較小不一定快:

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) 

另一個[也許更高效]:

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

更效率比三元:

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

這不會比較兩次數字,而不是一次? –

+0

...並進行兩個函數調用。 – Pointy

+0

還要注意,它會拋出一個語法錯誤......方法是'max'和'min'(小寫) –

2

如何

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

這不是效率不高,因爲它比較了兩次數字? –

+0

是的,這是真的,但個人(在像動畫一樣密集的東西之外)我不會擔心幾微秒 –

+0

他們加起來很快:) – Asken

1

你可以使用三元運算:

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