欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 14:53:20
...

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的理解又会更上一层楼(我到现在对原型的东西还是一知半解,哭唧唧)。