旧版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
相关产品推荐
相关产品推荐

