You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧版JavaScript实现:获取数组中大于指定值的最近数或最大值

旧版JavaScript下实现从数组获取大于指定值的最接近数值的最优方案

嘿,这个需求我太熟悉了!在不支持ES6特性(比如find方法)的旧版JavaScript环境里,我们可以用更兼容、高效的方式来实现,完全匹配你要的逻辑:

需求回顾:从数组scrSizes中获取大于scrWidth的最接近数值;若scrWidth大于数组中的最大值,则取该最大值。例如输入500返回640,输入5000返回1920。

优化后的兼容代码

因为你的scrSizes是升序排列的,我们可以利用这个特性直接遍历,找到第一个大于目标值的元素就停止,效率拉满:

var scrWidth = $window.width(); 
var scrSizes = [320, 480, 640, 768, 1024, 1366, 1600, 1920]; 
var theSize = scrSizes[scrSizes.length - 1]; // 默认取数组最大值

// 遍历数组找第一个大于scrWidth的元素
for (var i = 0; i < scrSizes.length; i++) {
    if (scrSizes[i] > scrWidth) {
        theSize = scrSizes[i];
        break; // 找到就终止循环,不用继续遍历
    }
}

为什么这是更优的方案?

  • 极致兼容性:完全支持ES3及以上的所有旧版JS环境,不用操心find这类ES6方法的兼容问题
  • 更高效率:一旦找到符合条件的元素就跳出循环,避免不必要的遍历(和find的逻辑一致,但兼容性更好)
  • 逻辑更简洁:直接把数组最大值设为默认值,省去了额外的if-else分支,代码更易读

额外补充:如果数组未排序怎么办?

如果你的scrSizes可能不是升序排列的,那只需要先加一步排序(注意要用数值排序,不是默认的字符串排序):

// 先对数组进行升序排序(仅当数组未排序时需要)
scrSizes.sort(function(a, b) {
    return a - b;
});

// 之后再执行上面的遍历逻辑即可

内容的提问来源于stack exchange,提问作者Tsovinar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:01