js数组字符串关键字查找的方法 includes() indexOf() lastIndexOf() - Kaiqisan

js数组字符串关键字查找的方法 includes indexOf lastIndexOf

ヤッハロー、Kaiqisanすうう、一つふつうの学生プログラマである,之前通过打印一个空字符串,通过查看其__proto__原型方法,找到了数组的所有的方法,里面绝大部分我是知道的,但是还有极少的几个方法我从来没见到,我会在以后的文章里详细地记下这些数组的操作方法。

includes(val, startIndex): 判断字符串内是否包含了相应的内容(顺序也不可以乱),第一个参数填写需要判定的关键字,第二个参数可选填写开始查找的索引值,可为负值,从倒数第|startIndex|个字符开始查找,默认值为0。它有返回值,如果包含相应的字符串就返回true,不相应的就返回false

const a = '857857857857'
const b = 'hello world!'
let flag1 = a.includes("857") // 输出为true
let flag2 = b.includes("world",5) // 这里判断了从第5位开始是否包含了world这个字符串,这里输出为true 
console.log(flag1, flag2) // true true

它不仅可以查找字符串,也可以查找数组成员,判断该数组内是否包含这个成员。

let arr = ['app', 'usb', 'che', 'dd']
let flag1 = arr.includes('usb')
let flag2 = arr.includes('c')
console.log(flag1, flag2) // true false

PS:在进行字符串搜索的时候,切勿设置关键字为正则表达式,否则报错。

Uncaught TypeError: First argument to String.prototype.includes must not be a regular expression

indexOf(val, startIndex): 判断字符串是否包含了相应内容,如果有,返回这个关键字第一次出现的位置,如果没有找到想要的内容,就返回 -1。第一个参数val传入希望查找的关键字,不支持正则表达式 ,第二个参数是可选项,传入希望开始查找的索引值,默认值为length - 1(值不合法或没有),但是它不支持负数,不支持从倒数第n位开始查找。

let str = 'hello mxxher fxxk'
let flag1 = str.indexOf('fxxk')
let flag2 = str.indexOf('fuck')
console.log(flag1, flag2) // 13 -1

// Kaiqisan再次提醒,小孩子不可以说脏话!

它和includes方法一样,也支持数组成员的查找。返回符合条件的下标

let arr = ['app', 'usb', 'che', 'dd']
let flag1 = arr.indexOf('usb')
let flag2 = arr.indexOf('usa')
console.log(flag1, flag2); // 1 -1

lastIndexOf(val, startIndex): 查找某关键词最后一次出现的位置,本质上与indexOf是一样的,但是执行流程却与indexOf方法是不同的,indexOf方法是从指定下标(没有指定就是0)开始往后搜索,找到第一个符合条件的就返回,lastIndexOf是从指定下标(没有指定就是length - 1)开始往前搜索,找到第一个符合条件的就返回。

let str = 'usb-usa-usb-usa-use'
let a = str.lastIndexOf('usa')
let b = str.lastIndexOf('uss')
console.log(a, b) // 12 -1

这个方法对于数组同理,这里就不再赘述。

注意点

以上的所有方法都是匹配字符串的方法,在数组中,切勿拿来判断对象,匹配对象内容是否相等有专门的方法,在这里使用会导致意外的错误。

let arr = [1, 2, 3, {name: 'kaiqisan'}]
arr.indexOf({name: 'kaiqisan'}) // -1 
// 直接往参数里面传入对象必找不到!
let obj = {name: 'kaiqisan'}
let arr = [1, 2, 3, obj]
arr.indexOf(obj) // 3 
// 勉强可以找找参数,但是极力不推荐这样

总结

数组字符串查找方法还没讲完,大家有空可以多多去查看一些js底层的东西,如果您搞懂了js的原型链,那么,您对js的理解又会更上一层楼(我到现在对原型的东西还是一知半解,哭唧唧)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值