Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找高于或低于x的最近数字_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 查找高于或低于x的最近数字

Javascript 查找高于或低于x的最近数字,javascript,jquery,arrays,Javascript,Jquery,Arrays,如果我有一个“动态”数组,例如: var xArray = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6] 我需要找到与最后一个条目最接近的数字(就索引而言),它不等于最后一个条目(就数字而言) 有点难以解释!对于上面的数组,最后一个条目是6。我正在寻找与6不同的最近的条目(可以是更高或更低的值)。在这种情况下,它将是 xArray[11] //7 因此,目前我有: var lastX = xArray[xArray.length -1], prevX = ????? 比如

如果我有一个“动态”数组,例如:

var xArray = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6]
我需要找到与最后一个条目最接近的数字(就索引而言),它不等于最后一个条目(就数字而言)

有点难以解释!对于上面的数组,最后一个条目是6。我正在寻找与6不同的最近的条目(可以是更高或更低的值)。在这种情况下,它将是

xArray[11] //7
因此,目前我有:

var lastX = xArray[xArray.length -1],
prevX = ?????
比如:

function diff(arr) {
    var a = arr.slice(), last = a.pop(), nxt = a.pop();
    while (last == nxt && a.length) nxt = a.pop();
    return nxt;
}

就像

var diff = diff(xArray);
比如:

function diff(arr) {
    var a = arr.slice(), last = a.pop(), nxt = a.pop();
    while (last == nxt && a.length) nxt = a.pop();
    return nxt;
}

就像

var diff = diff(xArray);
试一试

演示:

试试看

演示:

试试这个

var xArray = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6];
var xChangeDetector = null;

for(var I=xArray.length-1; I>=0 ; I--)
{
   if(xChangeDetector == null)
     {
        xChangeDetector = xArray[I];
     }
   else if(xChangeDetector != xArray[I])
     {
        xChangeDetector = xArray[I];
        break;
     }       
}

alert(xChangeDetector);
试试这个

var xArray = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6];
var xChangeDetector = null;

for(var I=xArray.length-1; I>=0 ; I--)
{
   if(xChangeDetector == null)
     {
        xChangeDetector = xArray[I];
     }
   else if(xChangeDetector != xArray[I])
     {
        xChangeDetector = xArray[I];
        break;
     }       
}

alert(xChangeDetector);

功能性解决方案可以是:

var array = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6]
var lastIndex = array.reduce(function(acc,item,index,arr){ 
                               return item !== arr[acc] ? index : acc 
                             }, 0) -1;

console.log(lastIndex);

它的效率不如其他解决方案,因为它需要遍历整个阵列。

功能解决方案可以是:

var array = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6]
var lastIndex = array.reduce(function(acc,item,index,arr){ 
                               return item !== arr[acc] ? index : acc 
                             }, 0) -1;

console.log(lastIndex);

它的效率不如其他的,因为它需要遍历整个数组。

可能重复的可能重复的可能非常智能,只需为OP添加一个信息,他可能希望首先复制数组。谢谢这对我来说是最简单的!当xArray是一个event.originalEvent.touchs[0]数组时,用于检测最后一个拖动方向。PageX相当智能,只需为OP添加一个信息,他可能希望首先复制数组。谢谢这对我来说是最简单的!当xArray是event.originalEvent.touchs[0].pageX的数组时,用于检测最后一个拖动方向