查找数组上次出现值的索引

时间:2018-01-06 17:13:40

标签: javascript

在不使用.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

3 个答案:

答案 0 :(得分:1)

您的循环条件错误。除非数组为空,否则i永远不会小于0.

请改用:

(i=array.length-1; i >= 0; i--) {

答案 1 :(得分:1)

您的检查错误,i对于索引来说永远不会小于零。

顺便说一句,如果你检查一个值,你可以使用名称值而不是index,这会导致错误的假设,并提前声明所有变量。

&#13;
&#13;
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;
&#13;
&#13;

使用while循环的简短方法。

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:1)

您应该更改for语句中的检查。我们从最后一个索引开始,然后我们下到0指数。因此,您可以在index >=0时循环,而不是在index<0时循环。

我为一些参数和参数使用了不同的名称,以使代码更具可读性。

&#13;
&#13;
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;
&#13;
&#13;