найти ближайший номер, который выше или ниже, чем х

0

Если у меня есть массив, который является "динамическим", например:

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 = ?????
Теги:
arrays

5 ответов

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);
  • 0
    Довольно умный, просто, возможно, добавьте информацию для OP, что он может сначала скопировать массив
  • 0
    @KeluThatsall - хорошая мысль, добавил!
Показать ещё 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

Демо: скрипка

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

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

Он не так эффективен, как другие, потому что он должен проходить через весь массив.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню