【问题标题】:Return value from largest object property in array - JS从数组中的最大对象属性返回值 - JS
【发布时间】:2012-10-26 08:07:06
【问题描述】:

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

我目前正在编写一个自定义灯箱脚本,类似于可以在 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) ,它与输入的大小成线性关系,所以我认为你不应该关心它。
  • 感谢您的意见,@Masar。

标签: javascript


【解决方案1】:

这是 O(n) 复杂度,我想不出比这更好的了。多年来,迭代具有 10000 个元素的数组并不是什么大问题。你想在这里存储多少张照片?百万?如果你的算法变慢了,我会寻找不同的原因。

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

【讨论】:

  • 感谢您的 cmets。该函数只会在加载时被调用,并且一旦被调用,数组的结构将不会改变。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-12-26
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
相关资源
最近更新 更多