如果我有一个“动态”数组,例如:
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 = ?????
答案 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;
}
称之为
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);
答案 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);
它不如其他人有效,因为它需要遍历整个数组。