我想测试一些输入字段中的累积值(var goal
),其中数组中最接近最高值['size']
。
因此,我们的目标是找到与size 95
最接近的最高值。
var variants = [
{ value: "128428226", size: "50 ", price: 3.72, priceIncl: 4.5 },
{ value: "128428229", size: "100 ", price: 5.5, priceIncl: 6.65 },
{ value: "128428232", size: "150 ", price: 7.27, priceIncl: 8.8 }
]
var goal = 95;
var closest = variants;
var closestPrice = '';
var closestPriceIncl = '';
var closestVal = '';
$.each(variants, function(){
if (closest['size'] == null || Math.abs(this['size'] - goal) < Math.abs(closest['size'] - goal)) {
closest = this;
closestPrice = closest['price'];
closestPriceIncl = closest['priceIncl'];
closestVal = closest['value']
}
});
我能够得到我想要的所有价值。但是当目标类似于75
时,我的脚本会从size: "50"
中选择值。所以实际上当目标是51时,它应该选择100等。
我真的找不到办法做到这一点。我找到了一些使用函数的其他答案,但后来我没有得到如何获得其他值。 (我只需要找到最接近的最高值。) 任何帮助非常感谢。
答案 0 :(得分:2)
如果我正确理解您的问题,以下代码就足够了:
base_class
两个定义谓词是最接近的变体的大小大于目标,并且大小之间的差异应该是最小的。
答案 1 :(得分:0)
试试这个。我想这一定是你要做的。
var variants = [
{ value: "128428226", size: "50 ", price: 3.72, priceIncl: 4.5 },
{ value: "128428229", size: "100 ", price: 5.5, priceIncl: 6.65 },
{ value: "128428232", size: "150 ", price: 7.27, priceIncl: 8.8 }
];
var arr = Object.keys(variants).map(function(k) { return parseInt(variants[k]['size']) });
function closest(array,num){
var i=0;
var minDiff=1000;
var ans;
for(i in array){
var m=Math.abs(num-array[i]);
if(m<minDiff){
minDiff=m;
ans=array[i];
}
}
return ans;
}
console.log(closest(arr,75))
&#13;
答案 2 :(得分:0)
您可以使用elemnt的绝对delta和之前的stire临时结果,如果更小,则推送一个新数组,否则检查delta是否相同,然后将实际项目推送到结果集。
结果返回一个包含最近项的数组。
也许这是一个好主意,可以清除数据附加值空间,例如size: "50 "
。
var variants = [{ value: "128428226", size: "50", price: 3.72, priceIncl: 4.5 }, { value: "128428229", size: "100", price: 5.5, priceIncl: 6.65 }, { value: "128428232", size: "150", price: 7.27, priceIncl: 8.8 }],
goal = 95,
closest = variants.reduce(function (r, o) {
if (!r || Math.abs(o.size - goal) < Math.abs(r[0].size - goal)) {
return [o];
}
if (Math.abs(o.size - goal) === Math.abs(r[0].size - goal)) {
return r.push(o);
}
return r;
}, undefined);
console.log(closest);
&#13;