Если у меня есть массив, который является "динамическим", например:
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 = ?????
Что-то вроде:
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 index = xArray.length - 1,
num = xArray[index];
while (--index >= 0 && xArray[index] == num);
console.log(index)
//here num will be 11
Демо: скрипка
Попробуй это,
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);
Он не так эффективен, как другие, потому что он должен проходить через весь массив.
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);