俗话说的好“温故而知新”,于是作者前段事件对许多东西都进行了复习,近段时间也许过多出一些总结篇的文章(可以根据目录来选择需求哦)
那么今天要总结的就是个人认为比较常用的数组方法,大家觉得有补充的可以评论或私信,下面开始讲解正文
一、判断类型(判断是否为数组)
当我们遇到一些面试题时,有时你知道它是一个数组,但计算机却并不能一眼识别出这是数组,那么我们就需要借助一些识别是否为数组的方法了
1.较常用版本
1).instanceof
准确来说instanceof是一个运算符,它不仅可以用来判断是否为数组类型,同样也可以判断是否为其他类型,返回结果为布尔类型
const arr = [1,2,3]
console.log(arr instanceof Array) //true
2).Array.isArray()
括号里面为需要判断的值,返回的结果也是布尔类型
const arr = [1,2,3]
console.log(Array.isArray(arr))//true
2.不常用版本(不正常版本)
1).valueOf()
这个方法可以说很鸡肋,所以就把它列为不正常版了,数组通过valueOf方法返回的值则是数组本身,严格来讲并没有起到判断的作用,但以下代码可供大家去思考
const arr = [1,2]
const obj = { a:1 }
console.log(obj.valueOf())//{ a:1 }
console.log(arr.valueOf())//[1,2]
2).toString()
其实大家看到这里也可以发现,这两个方法就是对象的内置方法,再之前的整活篇中我们用其解决过一个很有意思的问题,大家感兴趣的可以去看看,本次返回的结果大家可以思考其愿意
const arr = [1,2]
const obj = { a:1 }
console.log(obj.toString())//[object Object]
console.log(arr.toString())//[1,2]
console.log(Object.property.toString.call(arr))//[object Array]
二、数组检索方法
1.includes()
用于确定数组中是否含有某个元素,返回的为布尔类型
const arr = [1,2]
arr.includes(1)//true
arr.includes(2)//false
2.indexOf()/lastIndexOf()
同样时确定数组中是否含有某个元素,但返回结果却不相同:
① indexOf()的返回结果
当寻找到此元素时,则返回(从前往后)找到的第一个此元素的索引;若没找到,则返回-1
② lastIndexOf()的返回结果
返回(从后往前)找到的第一个此元素的索引或-1(索引依旧是从前往后数哦,不要混淆)
const arr = [1,2,1]
arr.indexOf(1)//0
arr.indexOf(3)//-1
arr.lastIndexOf(1)//2
arr.lastIndexOf(3)//-1
3.find()/findIndex()
find()和findIndex()单词上大家也许就可以看出大致的区别了
find方法找到数组中符合条件的第一个元素,都不符合条件则返回undefined
findIndex方法是找到数组中符合条件的第一个元素的索引,都不符合则返回-1
相同的则是返回的都是第一个,不同的则是一个是元素,一个是索引,通过以下代码可以帮助大家方便区分两者
const arr = [1,2,3,4]
arr.find(function(item, index) {
return item > 2
}) //返回大于2的第一个元素,只会返回3
arr.findIndex(function(item, index) {
return item > 2
}) //返回大于2的第一个元素的索引,返回的是2
三、数组的迭代方法(重要且常用)*
在我们的日常中数组的遍历可以说是非常非常的常用了,以下便是我总结的几种方法,再次就不分是否常用了,大家可以根据环境去选择使用那种方法
1.forEach()
const arr = [1,2,3]
arr.forEach((item,index) => {
console.log(item)
})//会打印每个元素
2.some()/every()
此方法主要用于判断是否满足条件,但返回的是布尔值,两者只是判断条件略有不同
some方法:当数组中有一个或多个满足条件,则会返回true,否则返回false
every方法:当数组中所有所有元素都满足条件才会返回true,否则返回false
every方法相对some方法会更严格一些,大家可以根据环境去选择使用
const arr = [1,2,3]
arr.some(item => {
return item > 1
})//true
arr.every(item => {
return item > 1
})//false 因为1不大于1
3.filter()
同样也是判断,但此方法返回的是一个数组,并不会修改原数组
const arr = [1,2,3]
arr.filter(item => {
return item > 1
})//[2,3]
4.map()
此方法主要用于遍历,返回的同样是一个数组,并不会修改原数组(可用于数学运算)
与filter方法不同的是,map是对原数组中的属性进行调用一次,返回的值由每次调用的返回值组成
const arr = [1,2,3]
arr.map(item => {
return item + 1
})//[2,3,4]
5.entries()/keys()/values()
主要讲解entries方法,后者与前者方式基本相同
entries方法是对数组的键值对进行遍历,返回一个遍历器,可以用for...of对其进行遍历
const arr = [1,2,3]
for(let [index,value] of arr.entires()) {
console.log(index,value)
}
//0, 1
//1, 2
//2, 3
那么通过上面的代码和解释,大家也许就明白后者的用法了,我们直接上代码
const arr = [1,2,3]
for(let index of arr.keys()) {
console.log(index)
}//打印的为数组每个元素的索引
for(let value of arr.values()) {
console.log(value)
}//打印的为数组的每个元素
以上便是本期对数组方法的一部分总结,如有问题可以私信或评论啊