找到数组中的下一个最高数字

时间:2016-08-22 14:58:04

标签: javascript

我有一组数字和一个值。我想找到价值附近的数字。最重要的是最高价值但我需要两者。

var array = [2,4,5,8,11];
var value = 9;

我需要的结果应该是:8和11。

我该怎么做?

感谢。

3 个答案:

答案 0 :(得分:4)

只需为每个值编写一个简单的for循环搜索。

例如:

function findNumbers(arr, num){
    var low = num + 1; //largest number lower than num, set initial value above num
    var high = num - 1; //smallest number higher than num, set initial value below num
    for(var i = 0; i < arr.length; i ++){
         if(arr[i] > low && arr[i] < num){
             low = arr[i];
         }
         if(arr[i] < high && arr[i] > num){
             high = arr[i];
         }
    }

    //optional check to see if low/high exists
    if(low > num){
        low = -1; //not found
    }
    if(high < num){
        high = -1; //not found
    }
    return [low,high];

}

然后你去。无论arr是否已排序,这都有效。

答案 1 :(得分:2)

这有助于您:

&#13;
&#13;
<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <script>
        
        var array = [2,4,5,8,11];
        
        var value = 9;
        
        var min,max;
        
        fun();
        
        function fun() {
            
            var sortArray = array.sort(function(a,b){return a-b});
            
            for(var i=0; i<sortArray.length;i++) {
                
                if (sortArray[i] < value)
                    min = sortArray[i];
                
                if (sortArray[i] > value)
                    max = sortArray[i];
            }
            
            alert(min + " , " + max);
        }
        
    </script>
</body>
</html>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

看着你的问题看起来你还在学习jquery。但是我相信你会在这里得到很好的建议。

以下是您的测试用例的示例,我将对您进行解释,以便您可以学习每一行并学习。

var myArray = [2, 4, 5, 8, 11];
var myValue = 9;

function BiggerThan(inArray) {
  return inArray > myValue;
}

function LesserThan(inArray) {
  return inArray < myValue;
}    

var arrBiggerElements = myArray.filter(BiggerThan);
var nextElement = Math.min.apply(null, arrBiggerElements);
alert(nextElement);

var arrLesserElements = myArray.filter(LesserThan);
var prevElement = Math.max.apply(null, arrLesserElements);
alert(prevElement);