从数组-JS中的最大对象属性返回值



这个问题的标题可能有些误导,但最接近准确地描述了我遇到的问题。

我目前正在使用自定义Lightbox脚本,类似于在Facebook和Airbnb上找到的脚本。一旦用户单击图像,灯箱就不会调整到内容的大小,而是将图像周围的黑色区域居中(如果您是常规的FB用户,您应该知道我的意思)。

我正在将用于Lightbox的映像存储在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(数组中最大的宽度)。

有比在整个数组中循环并比较所有内容更有效的方法了吗?我担心的是,如果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 };
}

这是o(n)的复杂性,我无法想象有什么比这更好的了。多年来,通过具有10000个元素的阵列迭代并不是一件大事。您想在这里存储几张照片?英里?如果您的算法减慢,我会搜索不同的原因。

我假设您一次进行此迭代。如果您想经常更改此数组,则可以进行一些优化,以避免整个整个阵列。我有一些好主意,但这是更多的写作,所以如果您需要它,请评论此答案。

最新更新