JavaScript,使用indexOf()和lastIndexOf()方法查找数组实例

4
我正在阅读Nicholas Zakas的《Web开发者专业JavaScript》(第三版),希望能自学JS。然而,在第5章的“位置方法”一节,我在第118页上遇到了困难(如果你有这本书的话)。他解释说,“indexOf()方法从数组的前端(项0)开始搜索,并继续到后端,而lastIndexOf()则从数组的最后一项开始,继续到前面”。此外,他解释道:“每个方法都接受两个参数:要查找的项和一个可选的索引,从哪里开始查找。” 然后,他试图用例子来说明这个问题。
如下所示,在警告语句的右侧,他列出了在提供的参数情况下每个语句的正确输出。我不明白这些输出是如何确定的。例如,警报(数字.indexOf(4)); 如何产生3?昨晚我看到这个后觉得可能是太累了,不过今天我仍然无法弄清楚这是如何实现的。我在书的附属网站的勘误部分中搜索可能的印刷错误,但没有列出任何内容。我还在其他地方搜索,但发现大多数例子都涉及到字符串而不是数字。感谢任何帮助。这是我在Stack Overflow上的第一篇文章,如果我的文章有任何错误请见谅。
var numbers = [1,2,3,4,5,4,3,2,1];

alert(numbers.indexOf(4));        //3

alert(numbers.lastIndexOf(4));    //5

alert(numbers.indexOf(4, 4));     //5

alert(numbers.lastIndexOf(4, 4)); //3  

我最初的想法是:

alert(numbers.indexOf(4));        
//the item in the array with the fourth index, or 5


alert(numbers.lastIndexOf(4));    
//5 (this was only one that seemed to make sense to me) by counting back from the last value


alert(numbers.indexOf(4, 4));     
//start looking at index 4, or 5, and then count right four places to end up at 1 (last item in array).                                  


alert(numbers.lastIndexOf(4, 4)); 
//1, counting back to the left from the value with index 4, or 5, to reach the first value in the array.

非常感谢您的支持,在确定所需参数的输出结果以及如何根据给定的其他可选参数计数时,任何帮助都将不胜感激。再次感谢。


好的,JS数组从0开始计数(即第一个项目的索引为0)。 - Raptor
"这是我在Stack Overflow上的第一篇帖子,如果我的帖子有任何错误之处,请多多包涵。" - 您的帖子完全没有问题。干得好!欢迎来到StackOverflow! - ColinE
4个回答

5

在大多数编程语言中,索引默认从0开始。因此,你可能会存在理解问题。请再次考虑以索引从0开始的示例。

var numbers = [1,2,3,4,5,4,3,2,1];

alert(numbers.indexOf(4));        //3, because 4 is at 3rd index
alert(numbers.lastIndexOf(4));    //5, because last 4 is at 5th index
alert(numbers.indexOf(4, 4));     //5, because searching will start from 4th index
alert(numbers.lastIndexOf(4, 4)); //3, because searching will start from last 3rd element.  

谢谢Parkash,你的解释最帮助我理解indexOf()和lastIndexOf()的作用。我现在明白了这些方法是如何工作的。 - bonsigh

4

JavasScript数组从零开始索引,也就是说,第一个项目的索引为零。几乎所有编程语言都是如此(除了一些奇怪的原因,XPath例外!)。

indexOf函数返回第一个等于所提供参数的项的索引。

var numbers = [1,2,3,4,5,4,3,2,1];

var index = numbers.indexOf(4);  // index is 3

alert(numbers[index]); // outputs 4

1
在JS或其他许多语言中,数组的索引计数从0开始,因此,对于:
var numbers = [1,2,3,4,5,4,3,2,1];
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5
numbers[5] = 4
numbers[6] = 3
numbers[7] = 2
numbers[8] = 1 

0

这是

indexOf("SearchString");

不是

indexOf(indexNumber);

那将会非常冗余。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接