lastIndexOf 混淆

4

我真的不明白lastIndexOf如何工作。我无法理解第二个可选参数的用法。

string.lastIndexOf(searchvalue,start)

searchvalue -> 必需。要搜索的字符串

start -> 可选。开始搜索的位置。如果省略,则默认值为字符串的长度。

var test = "mississippi";

test.lastIndexOf("ss",1) // return -1
test.lastIndexOf("ss",2) // returns 2
test.lastIndexOf("ss",5) // returns 5

有人能逐步解释一下吗?比如为什么第一个返回-1,第二个返回2?

TIA(谢谢答复)

2个回答

5

这是因为这是起始索引。-1表示未找到。

m 0
i 1
s 2
s 3
i 4
s 5
s 6
i 7
p 8
p 9
i 10

从1开始,我没有找到匹配项。但是在2处,我看到s然后在3处又看到s

MDN解释得很好。


1
具体来说,它是搜索的起点,并且搜索是向后执行的。如果参数为“1”,则仅搜索字符串的前两个字符。如果为“5”,则搜索到第六个字符(从1开始计数)的所有字符。 - Frédéric Hamidi
好的。然后我要查找“ss”,并将5作为第二个参数传递。为什么它会返回5作为结果呢?因为第二个“s”是第六个字符。难道它不应该查找前5个字符吗? - Barış Velioğlu
@Ryu,不是的,第二个s索引是6。假设你从1开始计数,它是字符串中的第七个字符。该函数返回5,因为它从索引5(第一个s)开始搜索,并从这个位置看到了ss(字符串的其余部分仍然计数)。 - Frédéric Hamidi
@FrédéricHamidi你的意思是,“如果参数为1,则只搜索字符串的前两个字符”,那么如果参数为2,不应该只搜索前三个字符吗?在这种情况下应该返回“mis”,并且应该返回-1吗? - Hazem Salama
@hsalama,确实很棘手,这就是为什么我在之前的评论中说“字符串的其余部分仍然计数”。搜索从起始索引向后执行,但整个字符串仍然被考虑在内。传递“1”在“ississipi”的开头搜索“ss”,然后是“mississippi”(没有匹配)。传递“2”在“ssissippi”的开头搜索“ss”,这是匹配的。传递“5”在“ssippi”的开头搜索“ss”,这也是匹配的。(我不认为我可以在评论中更好地解释它,但如果必须的话,我可以编辑丹尼尔的答案并添加丑陋的ASCII艺术:) - Frédéric Hamidi

-1

lastIndexOf() 方法获取主字符串中搜索字符串的最后一个索引。它将搜索字符串作为输入参数之一。

它返回搜索字符串的最后一个位置(索引)。如果找不到搜索字符串,则返回“-1”。 请访问 http://skillcram.com/JS.htm 以获取示例。


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