JS查找数组指定元素

JavaScript08

JS查找数组指定元素,第1张

findIndex它会返回数组中满足提供的函数的第一个元素的索引,否则返回 -1

跟findIndex差不多,只不过是倒序查找

观察可以知道findIndex 和findLastIndex的实现原理基本相同,区别只在于查找顺讯,那么如何通过实现一个函数,通过不同的传参来判断是使用findIndex还是findLastIndex呢?

实现:

新的需求:如何在一个排好序的数组中找到 value 对应的位置,保证插入数组后,依然保持有序的状态?

比如: sortedIndex([10, 20, 30], 25) // 2

如果是有序数组,那我们就不采用遍历的形式,采用二分法

看上去不错,基本实现了我们的要求,但还不够好,如果我想实现下面这种情况要怎么处理?

进阶实现:

现在尝试手写一个indexOf/lastIndexOf

indexOf和lastIndexOf都支持第二个参数fromIndex表示开始查找的位置。

在MDN上对fromIndex的解释如下:

fromIndex

开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.

比如:

fromIndex

从此位置开始逆向查找。默认为数组的长度减 1(arr.length - 1),即整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。

根据以上规则,我们实现第二版

主要围绕下面两点进行

根据以上要求,看下最终实现方法

1.arr.indexOf(搜索元素,开始位置):

元素在数组中的位置,如果没搜索到则返回 -1

2.arr.includes(搜索元素):

如果是返回 true,否则false

3.filter() 方法:返回符合条件的元素组成的数组

4.array.find():返回找出第一个符合条件的数组元素

5.array.findIndex():返回第一个符合条件的数组元素的位置,

如果所有元素都不符合条件,则返回-1

6.传统for()循环

7.for...of

8.forEach

9.some():用于检测数组中的元素是否满足指定条件(函数提供)

如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。

如果没有满足条件的元素,则返回false。

10.every:用于检测数组中的元素是否满足指定条件(函数提供)

如果都满足条件,则表达式返回true ,

如果有一个不满足,则返回false。

1、如果知道数组下标,直接 arr[index]方式获取

2、假设不知道数组下标,查找某一项值,例如: 数组 arr = ['red', 'green', 'yellow', 'green', 'blue'];查找 green:

var myFirstIndex = Array.indexOf(arr, "green")// 返回1

indexOf查找指定项的索引位置。 返回的索引是在 item 中指定的项的第一次出现。 如果找不到,则返回-1。再次调用该函数,并指定大于所找到元素的索引的起始索引值,可查找 item 的下一次出现。例如:

var mySecondIndex = Array.indexOf(Array, "green", (myFirstIndex + 1) )// 返回3