-2

我有一个数字数组,例如:

[10000 , 15000 , 20000 , 25000 , 30000]

我得到一个变量,它会有所不同,可以是数组范围内的任何位置,例如 23,500。

我需要从数组中找到最接近的数字,但它也必须低于给定变量。

最简单的方法是什么?(可以使用jQuery)

编辑:

我试过这个:

salary = data[3]; // what im trying it on, this = 60001


    // the array is built from a select
$.each($('#home-salary-from').children(), function(){

    salaryArray.push($(this).attr('id'))

})

    //returns [0, 10000 , 15000 , 20000 ...] etc up to 100000.

salaryFrom = salaryArray.filter( function(i){ return i <= salary }).pop();

console.log(salaryFrom)
    //always returns 100000 ??
4

5 回答 5

3

纯娱乐:

var max = 23500, 
    arr = [10000 , 15000 , 20000 , 25000 , 30000],
    closest;

// Solution 1 
    closest = arr.push( max ) && arr.sort()[ arr.indexOf( max ) - 1 ];

// Solution 2
    closest = arr.filter( function(i){ return i <= max }).pop();

// Solution 3
    closest = arr.sort(function(a,b){ return max >= b ? 1 : -1;  })[0];

// Solution 4
    closest = Math.max.apply(null,arr.filter(function(i){ return max - i >= 0 }));
于 2013-09-16T10:21:13.957 回答
0
var arr = [10000, 15000, 20000, 25000, 30000];
var v = 23500;

var out = arr
  .map(function(el) { return el - v; })
  .filter(function(el) { if (el < 0) return el; });

var found = arr[out.indexOf(Math.max.apply(null, out))] || 'No match';

小提琴

于 2013-09-16T10:08:42.083 回答
0

演示

var x = [10000, 15000, 20000, 25000, 30000];

function find_closest(y) {
    var z = [];
    $.each(x, function (i, val) {
        if (y > val) {
            z.push(val);
        }
    });
    z.sort();
    return (z[z.length - 1]);
}

alert(find_closest(23500));
于 2013-09-16T10:00:04.533 回答
0

怎么样:

Array.prototype.closest = function(value) {
    var res = 0;
    for (var i=0; i<this.length; i++) {
        if (this[i] > res && this[i] < value) res=this[i];
    }
    return res;
}

像这样使用:

var numb = [10000 , 15000 , 20000 , 25000 , 30000].closest(23500);

小提琴

于 2013-09-16T10:00:15.950 回答
0

我们可以使用这些简单的代码片段获得最接近的值 -

    function getClosestValue(array,value)
    {
      var closestValue = null;
      for(i=0; i<=array.length;i++)
      {
         if(array[i] > value && 
            (closestValue == null || array[i] < closestValue))
        {
    	   closestValue = array[i];
        }
    
    }
    
    return closestValue;
    }
    
    var numb = [10000 ,24000 ,20000 ,23700, 25000];
    alert(getClosestValue(numb,23500));

于 2016-02-24T10:50:42.827 回答