具有多列的数组中最接近的最高值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有多列的数组中最接近的最高值相关的知识,希望对你有一定的参考价值。
我想测试一个输入字段中的累积值(qazxsw poi),其中数组中的qazxsw poi值最接近。
所以,我们的目标是找到与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']
}
});
中选择值。所以实际上当目标是51时,它应该选择100等。
我真的找不到办法做到这一点。我找到了一些使用函数的其他答案,但后来我没有得到如何获得其他值。 (我只需要找到最接近的最高值。)任何帮助都非常感谢。
如果我正确理解您的问题,以下代码就足够了:
75
两个定义谓词是最接近的变体具有大于目标的大小,并且大小之间的差异应该是最小的。
尝试一下这个。我想这一定是你要做的。
size: "50"
您可以使用elemnt的绝对delta和先前的stire临时结果,如果更小,则推送一个新数组,否则检查delta是否相同,然后将实际项目推送到结果集。
结果返回一个包含最近项的数组。
也许这是一个好主意,并且可以通过附加值的空间来清理数据,例如 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 = 51;
var closest = null ;
var minDiff = Number.MAX_SAFE_INTEGER;
for(var index in variants){
var valueObject = variants[index];
if(valueObject.size > goal){
var diff = Math.abs(valueObject.size - goal);
if(diff < minDiff){
closest = valueObject;
minDiff = diff;
}
}
}
console.log(minDiff);
console.log(closest);
。
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))
以上是关于具有多列的数组中最接近的最高值的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 表单:显示和绑定具有多行和多列的列表/网格的数据