繁体   English   中英

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

[英]Return value from largest object property in array - 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 (数组中最大的宽度)。

有没有比遍历整个数组并比较所有内容更有效的方法? 我担心的是,如果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个元素的数组进行迭代并不是什么大问题。 您想在这里存储几张照片? 百万富翁? 如果您的算法速度变慢,我会出于不同的原因进行搜索。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM