Javascript 数组中最接近的价格?
对于Javascript中的这3个数组,数组中的值是ProductId=>Price(xx:xx) 我想看看如何通过我的价格从数组中获得最接近的“productId” 我已经试过了,但效果似乎不太好: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]);
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);
})