今天误解了Array.prototype.lastIndexOf函数, 有必要在这里写出来, 帮助像我一样的新手。
下面这个返回几?
var n = [1, 2, 3, 4, 5, 3,1];
console.log(n.lastIndexOf(3));
误解:
刚开始,我以为从后往前数,那么应该是返回1, 因为数到底2个就是3吗,再加上数组从0开始。
我又去看文档:
lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。
既然是最后一个索引,那么我继续从后往前数, 得到4.
但是:
各位运行一下就会发现结果是5!
这?
于是我写下:
按数到第一个, 如果从后往前数的话则应该是1, 从前往后就是2;
按数到第二个,从后往前第2个就,是4,从前往后第2个是5;
也就是说这是从前往后数得到的5.
那?
其实我误解了索引这个东西
索引不存在从哪边数,它是定的。
也就是说,一个元素对应一个索引,不会变的。
那么, 对于同一个元素不管是从前往后(indexOf)还是从后往前(lastIndexOf)查找,返回值应该是一样的。
var n = [1, 2, 3, 4, 5, 3,1];
console.log(n.indexOf(4));
console.log(n.lastIndexOf(4));
上面都返回3,我想lastIndexOf的出现是为了性能的原因吧,如果离后面近就用lastIndexOf,但是它又是找到最后一个索引,这有个屁用?
总结:
indexOf 从前往后第一个,返回索引
lastIndexOf 从后往前最后一个,返回索引
所以这2个查找的就是同一个元素, 不同的写法,而且始终只能返回索引小的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。