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

时间:2012-11-06 11:18:34

标签: javascript

这个问题的标题可能有点误导,但它最准确地描述我遇到的问题。

我目前正在开发一个自定义灯箱脚本,类似于可以在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(数组中最大的宽度)。 / p>

是否有比循环整个阵列更有效的方法并比较一切?我担心如果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 };
}

1 个答案:

答案 0 :(得分:1)

这是O(n)的复杂性,我无法想象比这更好的东西。通过具有10000个元素的数组进行迭代对于许多年来来说并不是什么大问题。你想在这里存放多少张照片? Milions?如果你的算法速度变慢,我会搜索不同的原因。

我假设你做了一次迭代。如果要频繁更改此数组,可以进行一些优化以避免整个数组遍历整个数组。我有一些好主意,但它更多是写作,所以如果你需要它,请评论这个答案。