Javascript 从数组中获取下一个最近(更高)的值(如果不存在) 函数getClosestValue(standardArray,targetVal){ standardArray=standardArray.sort(函数(a,b){返回a-b}); 如果(!(standardArray)| standardArray.length==0){ 返回null;} 如果(standardArray.length==1){ 返回标准数组[0];} 对于(变量i=1;i targetVal){ var prevs=标准阵列[i-1]; var current=standardArray[i] 返回Math.abs(prevs targetVal){ 返回输入=0){ 返回数组[索引]; }否则{ 返回null;//无应答 } } 变量ari=[110111120140148149155177188190]; log(getClosestValue(150,ari))
我修改这段代码是为了从数组中获得下一个最接近的值。如果数组中存在该值,则它将返回该值。如果它不在数组中,那么它应该返回最接近的较高值。Javascript 从数组中获取下一个最近(更高)的值(如果不存在) 函数getClosestValue(standardArray,targetVal){ standardArray=standardArray.sort(函数(a,b){返回a-b}); 如果(!(standardArray)| standardArray.length==0){ 返回null;} 如果(standardArray.length==1){ 返回标准数组[0];} 对于(变量i=1;i targetVal){ var prevs=标准阵列[i-1]; var current=standardArray[i] 返回Math.abs(prevs targetVal){ 返回输入=0){ 返回数组[索引]; }否则{ 返回null;//无应答 } } 变量ari=[110111120140148149155177188190]; log(getClosestValue(150,ari)),javascript,arrays,Javascript,Arrays,我修改这段代码是为了从数组中获得下一个最接近的值。如果数组中存在该值,则它将返回该值。如果它不在数组中,那么它应该返回最接近的较高值。 示例:[110111120140148149155177188190]如果我搜索150,我应该得到155而不是149。我试图解决这个问题,但发现有困难。你能帮忙吗。感谢编辑此解决方案应适用于: 函数getClosestValue(输入,数组){ var tempArray=array; var index=tempArray.sort().findIndex(
示例:[110111120140148149155177188190]如果我搜索150,我应该得到155而不是149。我试图解决这个问题,但发现有困难。你能帮忙吗。感谢编辑此解决方案应适用于: 函数getClosestValue(输入,数组){ var tempArray=array; var index=tempArray.sort().findIndex((项)=>{ 返回输入<项目; }); 如果(索引>=0){ 返回数组[索引]; }否则{ 返回null;//无应答 } } 变量ari=[110111120140148149155177188190];
log(getClosestValue(150,ari))当
i
设置为1时,您将启动for循环,这意味着您希望从数组中的第二个元素开始。但是,您的比较standardardary[i]>targetVal
忽略了standardardary[i-1]
(prevs
)可能小于0的事实
我已经用新的起始索引和变量名更新了您的示例:
function getClosestValue(standardArray, targetVal) {
standardArray = standardArray.sort(function(a, b){return a-b});
if (!(standardArray) || standardArray.length == 0) {
return null;}
if (standardArray.length == 1){
return standardArray[0];}
for (var i=1; i<standardArray.length; i++) {
if (standardArray[i] > targetVal) {
var prevs = standardArray[i-1];
var currnt = standardArray[i]
return Math.abs( prevs-targetVal ) < Math.abs( currnt-targetVal ) ? prev : currnt;
}
}
return standardArray[standardArray.length-1];
}
var temp = getClosestValue([110,111,188,190,177,120,140,120,149,148,155], 149)
console.log(temp);
函数getClosestValue(standardArray,targetVal){
standardArray=standardArray.sort(函数(a,b){返回a-b});
如果(!(standardArray)| standardArray.length==0){
返回null;}
如果(standardArray.length==1){
返回标准数组[0];}
对于(变量i=0;i=targetVal){
var curr=标准数组[i];
var next=standardArray[i+1]
返回Math.abs(curr targetVal)函数getNextHighest(arr,val){
返回arr.slice().sort().find((x,i,a)=>i=val:x);
}
var数据=[110111188190177120140120149148155];
log(getNextHighest(data,149));
log(getNextHighest(data,120));
log(getNextHighest(data,1000));
您也可以试试这个
函数getClosestValue(数组,targetValue){
if(array.indexOf(targetValue)!=-1){
返回目标值;
}
否则{
var值;
对于(var i=0;1console.log(值)代码>需要对上面给出的答案进行一些修改,才能得到下一个最接近的值 首先对数组进行数字排序
function getClosestValue(standardArray, targetVal) {
standardArray = standardArray.sort(function(a, b){return a-b});
if (!(standardArray) || standardArray.length == 0) {
return null;}
if (standardArray.length == 1){
return standardArray[0];}
for (var i=0; i<standardArray.length-1; i++) {
if (standardArray[i] >= targetVal) {
var curr = standardArray[i];
var next = standardArray[i+1]
return Math.abs( curr-targetVal ) < Math.abs( next-targetVal ) ? curr : next;
}
}
return standardArray[standardArray.length-1];
}
var temp = getClosestValue([110,111,188,190,177,120,140,120,149,148,155], 149)
console.log(temp);
//numberAs函数将按关联顺序对数值数组进行排序
功能编号(a,b){
返回a-b;
}
函数getClosestValue(输入,数组){
//当您对数组进行数字排序时,您将能够获得下一个更高值的精确最近位置。
//若你们并没有对数组进行数字排序,那个么当在数组中搜索值1时,你们将得到110而不是90
var index=array.sort(numberAs).findIndex((项)=>{
返回输入<项目;
});
如果(索引>0){
返回数组[索引];
}否则{
返回null;//无应答
}
}
变量ari=[110,90111,1170180120140148149177155188190];
log(getClosestValue(1,ari));
我认为OP需要比输入值大的最接近值。因此,您应该返回array[index]
@csp713这是一个很好的捕获,它是一个愚蠢的bunder,答案已经更新。您的逻辑采用绝对值,因此-1现在是1,因此它当然会更接近。请小心对传递给函数的数组进行排序,因为原始顺序可能很重要。最好是创建一个副本并使用它。此外,第一个测试应该在您使用standardArray执行任何操作之前进行,因为您的第一个语句假设测试为真。;-)对不起,我忘了添加,如果它有相同的号码,它应该返回号码。如果我输入149,因为数组中有149。它应该归还它。如果该值不在数组中,则它应返回最接近的较高值。更新的答案standardArray[i]>targetVal
简单地变成standardArray[i]>=targetVal
。
// numberAs function will sort numeric array in asscending order
function numberAs(a,b) {
return a-b;
}
function getClosestValue(input, array){
// When you sort your array as numerically then you will able to get exact closest position of next higher value.
// If you don't sort your array numerically then you will get 110 instead of getting 90 when search value 1 in array
var index = array.sort(numberAs).findIndex((item) => {
return input < item;
});
if(index > 0) {
return array[index];
} else {
return null; // no answer
}
}
var ary = [110,90, 111, 1, 170, 180, 120, 140, 148, 149, 177, 155, 188, 190];
console.log(getClosestValue(1,ary));