
JavaScript 专题(九)数组中查找指定元素
一、findIndex 和 findLastIndex
1.1 findIndex
findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。
实现
1.2 findLastIndex
同样当我们倒叙查找首个满足条件的方法时,可以这样写:
上面的代码,和正序查找很相似,仅仅改变遍历的条件。
1.3 合并 findIndex 和 findLastIndex
大家可以看到,除了循环的条件不同,两个方法几乎一模一样,参考 lodash,我们将两个方法精简一下
再来看看它的兄弟——underscore 的思路就是利用传参的不同,返回不同的函数。
关于 findIndex 我们就告一段落了~,再来看看新的场景和实现吧!
在这里插入图片描述
二、sortIndex
在一个排好序的数组中找到 value 对应的位置,即保证插入数组后,依然保持有序的状态。
那么这个又该如何实现呢?
2.1 遍历
遍历大家都能想到,虽然它不一定最优解:
2.2 二分法
三、indexOf 和 lastIndexOf
indexOf():返回在数组中可以找到一个给定元素的第一个索引,如果不存在则返回-1。从数组的前面向后查找,从 fromIndex 处开始。
lastIndexOf() :返回指定元素在数组中的最后一个的索引,如果不存在则返回-1。从数组的后面向前查找,从 fromIndex 处开始。
3.1 indexOf 的第一版实现
emmmm…在看过 findIndex 和 lastFindIndex 的实现后,indexOf 也要整整齐齐的啊~
3.2 indexOf 和 lastIndexOf 通用第一版
通过参数来创建不同的查找方法
3.3 indexOf 和 lastIndexOf 通用第二版
这一次,我们允许指定查找位置,我们来看看 fromIndex 的作用:
设定开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回 -1。
如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即 -1 表示从最后一个元素开始查找,-2 表示从倒数第二个元素开始查找 ,以此类推。
注意:如果参数中提供的索引值是一个负值,仍然从前向后查询数组。如果抵消后的索引值仍小于 0,则整个数组都将会被查询。其默认值为 0。
写到这里我们在数组中查找元素就结束了,自己实现的和loadsh或underscore还是有很大区别的,如果大家对上面三节的代码任意有更好的实现,请一定写在留言区哦~
