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)在我看来,排序数组后,您只需要第一个等于或高于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;1a-b); if(数组[i]>targetValue){ 返回数组[i]; } } } } var值=getClosestValue([110111188190177120140148155],149);
console.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));