我有一系列数字,如:
[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 ??
答案 0 :(得分: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 }));
答案 1 :(得分: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));
答案 2 :(得分: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);
答案 3 :(得分: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';
答案 4 :(得分:0)
我们可以使用这些简单的代码snnipets获得最接近的值 -
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));
&#13;