JS查找数组指定元素

JavaScript015

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、首先在html文档中准备一个字符串,看到字符串中的字符有好多重复的,这是为了效果更明显

2、然后利用JS的indexOf方法来确定o的首次出现位置,

3、接下来利用lastIndexOf方法来确定o最后一次出现的位置,

4、接下来来看一下indexOf方法可以接纳第二个参数,

5、同样的lastIndexOf也可以接纳第二个参数,会发现结果反过来了

6、最后给大家演示一下,当获取到位置以后的用处,利用位置进行字符串的匹配即可。

1.字符串创建方式

2.string以及任何的js数据都有两种身份:

1)表示自身数据类型

2)表示对象类型身份:对象类型身份给每种数据类型提供了很多的操作方法,便于对数据进行操作

总之就是js中一切皆是对象,可以对其进行相应的操作。

3.字符串对象属性lenght。

string.lenght

表示字符串包含字符的个数

4.String对象方法

2)、 chartCodeAt (获取字符串指定下标字符的UniCode编码)

3)、 indexOf (获取指定字符下标首次出现的位置)

字符串.indexOf('指定字符') 获取指定字符下标,没有则返回-1

字符串.indexOf('指定字符',指定下标) 从指定下标处开始获取指定字符下标,没有则返回-1

可以用来判断html的class属性中是否包含某些类名。

4)、 lastIndexOf用法与indexOf完全相同,只是lastIndexOf是从后往前查找

5)、字符串的比较:

字符串大小比较实际上是比较两个字符串的ASCII编码值。1-9ASCII编码值逐渐增大,a-z编码值逐渐增大。

比较方法:先比较两个字符串的首位,首位相同则比较下一位,以此类推。

6)、字符串的截取方法substring

字符串.substring(起点下标,终点下标),可以截取到起点截取不到终点。起点终点位置颠倒也可以

字符串.substring(起点下标);起点及后面都可以截取到

字符串.substring(负数),如果传入参数为负数,会直接将负数参数置为0

7)、字符串的截取方法Slice

字符串.slice(起点下标,终点下标),可以截取到起点截取不到终点。起点终点位置颠倒不可以

字符串.slice(起点下标),起点及后面都可以截取到

如果参数为负,会将参数与原字符串的lenght相加得到结果作为参数,加完后还为负数,则置为零。

8)、字符串大小写转换方法:toUpperCase()toLowerCase()

9)、字符串的切割方法:split

字符串.split('切割标识')

以切割标识进行切割,将字符串切割分开,放入数组钟,并将数组返回。

切割标识会被切掉,不会保留到数组中,如果不传切割标识则将整个字符串放入数组作为一个数组项。

例子:例如微信小程序扫码进入页面传的参数为233_affadsgafd,则通过split("_")截取,scene[0]的值为233,scene[1]的值为affadsgafd

10)、替换字符串方法:replace()

字符串.replace('要替换的字符部分','用来替换的字符部分')

11)、删除字符串两端空格方法:trim()

字符串.trim()

删除字符串两边空格,一般用在注册用户名或密码的时候,防止用户输入空格;

trim只删除字符串两端空格,不删除字符串中间的空格