找到最接近或低于x的最接近的数字

时间:2013-11-29 16:52:37

标签: javascript jquery arrays

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

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

我需要找到最后一个条目的最接近的数字(就INDEX而言),它不等于最后一个条目(就NUMBER而言)

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

xArray[11] //7

所以现在我有:

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

5 个答案:

答案 0 :(得分:3)

类似的东西:

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

FIDDLE

称之为

var diff = diff(xArray);

答案 1 :(得分:1)

尝试

var xArray = [2, 4, 5, 5, 6, 7, 8, 9, 9, 8, 7, 7, 6, 6, 6]
var index = xArray.length - 1,
    num = xArray[index];
while (--index >= 0 && xArray[index] == num);
console.log(index)
//here num will be 11

演示:Fiddle

答案 2 :(得分:0)

试试这个,

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);

DEMO

答案 3 :(得分:0)

function firstDifferent(arr) {
    for (var i=arr.length-2; i>=0; i--) {
        if (arr[i] != arr[arr.length - 1])
            return i;
    }
}

var xArray = [2,4,5,5,6,7,8,9,9,8,7,7,6,6,6];
var different = firstDifferent(xArray);

答案 4 :(得分:0)

功能性解决方案可能是这个:

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);

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