在不使用.indexOf
的情况下,我尝试从末尾循环遍历数组以查找特定值的最后一次出现。这是我到目前为止所得到的,但它一直在返回undefined
。
var lastIndexOf = function (array, index) {
for (i=array.length-1; i < 0; i--) {
if (array[i] === index) {
return i;
}
}
}
console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1); //should return 3
console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 2); //should return 4
答案 0 :(得分:1)
您的循环条件错误。除非数组为空,否则i
永远不会小于0.
请改用:
(i=array.length-1; i >= 0; i--) {
答案 1 :(得分:1)
您的检查错误,i
对于索引来说永远不会小于零。
顺便说一句,如果你检查一个值,你可以使用名称值而不是index
,这会导致错误的假设,并提前声明所有变量。
var lastIndexOf = function(array, value) {
var i;
for (i = array.length - 1; i >= 0; i--) {
if (array[i] === value) {
return i;
}
}
return -1; // standard default value for not found indices
};
console.log(lastIndexOf([0, 1, 4, 1, 2], 1)); // 3
console.log(lastIndexOf([0, 1, 4, 1, 2], 2)); // 4
console.log(lastIndexOf([0, 1, 4, 1, 2], 42)); // -1
&#13;
使用while
循环的简短方法。
var lastIndexOf = function(array, value) {
var i = array.length
while (i--) {
if (array[i] === value) {
return i;
}
}
return -1;
};
console.log(lastIndexOf([0, 1, 4, 1, 2], 1)); // 3
console.log(lastIndexOf([0, 1, 4, 1, 2], 2)); // 4
console.log(lastIndexOf([0, 1, 4, 1, 2], 42)); // -1
&#13;
答案 2 :(得分:1)
您应该更改for
语句中的检查。我们从最后一个索引开始,然后我们下到0指数。因此,您可以在index >=0
时循环,而不是在index<0
时循环。
我为一些参数和参数使用了不同的名称,以使代码更具可读性。
var lastIndexOf = function (array, number) {
for (var index = array.length-1; index>=0; index--) {
if (array[index] === number) {
return index;
}
}
};
console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1)); //should return 3
&#13;