Javascript 数组中最接近的价格?

Javascript 数组中最接近的价格?,javascript,jquery,Javascript,Jquery,对于Javascript中的这3个数组,数组中的值是ProductId=>Price(xx:xx) 我想看看如何通过我的价格从数组中获得最接近的“productId” 我已经试过了,但效果似乎不太好: var price = 450; for ( i=0;i<instantPriser.length;i++ ){ if ( pris <= instantPriser[i]){ alert(instantPriser[i]);

对于Javascript中的这3个数组,数组中的值是ProductId=>Price(xx:xx)

我想看看如何通过我的价格从数组中获得最接近的“productId”

我已经试过了,但效果似乎不太好:

 var price = 450;
 for ( i=0;i<instantPriser.length;i++ ){
        if ( pris <= instantPriser[i]){
            alert(instantPriser[i]);
            return false;
        }
 }
var价格=450;

对于(i=0;i将所有值放入一个数组中,然后使用以下代码查找最接近的值

  var closest  = null;

  $.each(arr, function(index,value1){
      if (closest == null || Math.abs(value1 - value) < Math.abs(closest - value)) {
        closest = this.value;
      }
    });
  alert(closest );
var=null;
$.each(arr,函数(索引,值1){
如果(最近值==null | | Math.abs(value1-value)

如果没有任何库,您可以这样做

findClosest=function (obj,price) {
    var pid;
    var min = 100000
    for(i in obj) {
        if(obj.hasOwnProperty(i) {
            var diff = Math.abs(price - obj[i]);
            if(min >= diff) {
               min = diff
               pid = i;
            }
        }
    }
    console.log(pid); // replace it with return or alert
                      // or whatever your logic is
}
用法

以实用的方式:

var target = 450;
Object.keys(instantPriser).reduce(function(best, x) {
    return Math.abs(instantPriser[best] - target) <= Math.abs(instantPriser[x] - target)
        ? best : x;
})

首先,它们是3个对象,而不是3个数组。其次,除非它们是字符串,否则数值中不能有逗号,但这些不是数组。在警报(最近)中,它显示“对象窗口”.?我认为尝试打印最接近的.values在代码中,
最接近的
将是一个
数字
对象,而不是数字原语值,这可能会导致问题。我建议使用参数定义回调,并使用这些参数访问值,而不是使用
。这是一个很好的选择
findClosest(instantPricer,450)
var target = 450;
Object.keys(instantPriser).reduce(function(best, x) {
    return Math.abs(instantPriser[best] - target) <= Math.abs(instantPriser[x] - target)
        ? best : x;
})
Array.prototype.min = function(arr, f) {
    f = f || function(x) { return x; };
    return arr.reduce(function(best, x) { return f(best) <= f(x) ? best : x; });
}
var target = 450;
Object.keys(instantPriser).min(function(x) {
    return Math.abs(instantPriser[key] - target);
})