2012-11-06 113 views
1

這個問題的標題可能有點誤導,但它是最準確地描述我遇到的問題。從數組中最大的對象屬性返回值 - JS

我目前正在製作一個自定義燈箱腳本,類似於Facebook和airbnb上可以找到的腳本。一旦用戶點擊圖像,燈箱不會調整爲內容的大小,而是圖像以其周圍的黑色區域爲中心(如果您是普通的FB用戶,您應該知道我的意思)。

我存儲所述圖像以在一個JS陣列被用於收藏如下(從MySQL數據庫生成:

var item_images = [ 
    { 'id': 2, 'url': '50929ab7ae8e5.jpg', 'caption': 'My Photo # 1', 'width': 1000, 'height': 750 }, 
    { 'id': 7, 'url': '50929ab7ae8e8.jpg', 'caption': 'My Photo # 1', 'width': 1000, 'height': 800 }, 
    { 'id': 3, 'url': '50929ac161d10.jpg', 'caption': 'My Photo # 2', 'width': 1000, 'height': 750 }, 
    { 'id': 4, 'url': '50929acbe8dc8.jpg', 'caption': 'My Photo # 3', 'width': 1000, 'height': 750 } 
]; 

我需要在JS一個函數來找到最大寬度和最大高度所需爲的圖像。例如,給定上面的數據,我想的函數GetMaxSizes()將返回800(陣列中最大高度)和1000(陣列中的最大寬度)。

是否有一個更有效的而不是循環遍歷整個數組並比較所有內容?我關心的是這個問題LL變得緩慢,如果有很多元素的內部,item_images

function GetRequiredHeight() 
{ 
    var req_height = 0, 
     req_width = 0; 

    for(var i in item_images) 
    { 
     var image = item_images[i]; 
     if(image.width > req_width) { req_width = image.width }; 
     if(image.height > req_height) { req_height = image.height }; 
    } 

    return { width: req_width, height: req_height }; 
} 
+2

我不認爲有更有效的方法。除了你的算法是O(n),它與輸入的大小呈線性關係,所以我認爲它不應該成爲你的擔心。 – Masiar

+0

感謝您的輸入,@Masiar。 – BenM

回答

1

這是O(n)的複雜性,我不能想象還有什麼比這更好的。通過有10000個元素的數組迭代迭代很多年來都不是什麼大問題。您想在這裏存儲多少張照片? Milions?如果你的算法變慢,我會尋找不同的原因。

我假設你做了這個迭代一次。如果你想頻繁地改變這個數組,可以做一些優化來避免整個時間遍歷整個數組。我有一個好主意,但它更寫作,所以如果你需要它,請評論這個答案。

+0

感謝您的意見。該函數只會在加載時調用,一旦調用,數組的結構將不會改變。謝謝。 – BenM