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