javascript:数组中最接近的数字,位于较大的一侧

javascript:数组中最接近的数字,位于较大的一侧,javascript,arrays,Javascript,Arrays,是否有更好的方法从阵列中获取最接近的较大数字,或者如果scrWidth大于最大值,则取最大值? 例如,500返回640,5000返回1920。 (并且仅使用旧的javascript)您可以使用过滤器方法非常简洁地完成此操作: var scrWidth = $window.width(); var scrSizes = [320, 480, 640, 768, 1024, 1366, 1600, 1920]; var theSize = 0; if (scrWidth >=

是否有更好的方法从阵列中获取最接近的较大数字,或者如果scrWidth大于最大值,则取最大值? 例如,500返回640,5000返回1920。
(并且仅使用旧的javascript)

您可以使用
过滤器
方法非常简洁地完成此操作:

  var scrWidth = $window.width();
  var scrSizes = [320, 480, 640, 768, 1024, 1366, 1600, 1920];
  var theSize = 0;
  if (scrWidth >= 1920) {
    theSize = 1920;
  } else {
    theSize = scrSizes.find(function(element){return element > scrWidth});
  }
或香草JavaScript:

函数getNextHighestNumber(arr,number){
var max=0;
对于(变量i=0;i编号){
返回arr[i];
}
如果(arr[i]>最大值){
max=arr[i];
}
}
返回最大值;
}
log(getNextHighestNumber([2,5,12,34,56,17]);

log(getNextHighestNumber([2,5,12,34,56,57])使用map和min方法尝试下面的小代码,并观察结果:

 function getNextHighestNumber(arr, number) {
      return _.filter(arr, function(val) { 
        return val > number 
      })[0];
    }

 getNextHighestNumber([2, 5, 12, 34, 56], 17);

谢谢,:)

下面的函数给出的最接近的数字将大于参数中提供的数字,如果数组中的its,则else将返回参数中提供的数字,因为它大于数组中的所有数字

var scrWidth = $window.width();
  var scrSizes = [320, 480, 640, 768, 1024, 1366, 1600, 1920];
  var theSize = 0;
  if (scrWidth >= 1920) {
    theSize = 1920;
  } else {
var test = scrSizes.map(a=> Math.abs(scrWidth - a));
    theSize = scrSizes.find( a => a == scrWidth - Math.min(...test));
    theSize = theSize ? theSize : scrSizes.find( a => a == scrWidth + Math.min(...test));
  }
函数getNextHighestNumber(arr,number){
对于(变量i=0;i编号){
返回arr[i];
}
}
返回号码
}

| | 1920
可以添加到
的末尾。查找
会导致
未定义的

var-scrSizes=[320480640768102136611601920];
var-scrWidth=12345;
查找(函数(元素){return element>scrWidth;})| | 1920;
console.log(scrWidth,theSize);
var-scrWidth=320;
查找(函数(元素){return element>scrWidth;})| | 1920;

console.log(scrWidth,theSize)
假定
scrSizes
数组已排序,您可以对数组进行二进制搜索,但对于如此小的数组,这并不重要。线性搜索完全可以。在我看来,你所做的是更好的方法,因为我找不到更好的方法来解决这种情况。好吧,它使用17,但使用57给出undefined,在这里它应该返回56@kerkааа,现在检查一下。
 function getNextHighestNumber(arr, number) {
          for (var i = 0; i < arr.length; i ++) {
            if (arr[i] > number) {
              return arr[i];
            }
          }
         return number
  }