常用数组方法汇总
JS_常用数组方法汇总
包含数组转字符串、数组堆栈、数组排序、数组拼接、数组删改、数组索引、创建数组、数组循环遍历等方法
数组转字符
串方法
split()
可以把一个字符串切割成数组
参数
参数1:可选参数,从指定位置切割
参数2:可选参数,指定返回的数组长度
join()
可以把数组内的所有元素放入一个字符串
元素通过指定分隔符分隔
参数
参数1:可选参数,传入指定的分隔符,默认为','
数组堆栈方法
push()
向数组的末尾添加一个或多个元素,并返回新的长度【会改变原数组】
pop()
删除数组的最后一个元素【会改变原数组】
unshift()
将新项添加到数组起始位置【会改变原数组】
shift()
用于把数组的第一个元素从其中删除,并返回第一个元素的值【会改变原数组】
arr.length属性
可直接于数组长度+1,追加元素
示例代码
const arr = [1,2]
arr[arr.length] = 3
数组排序方法
reverse()
反转原数组元素顺序,返回值是倒序后的原数组【会改变原数组】
sort()
用于对数组的元素进行排序,返回值是重新排序后的原数组【会改变原数组】
使用数字排序,须通过一个函数作为参数来调用
升序(a-b)
降序(b-a)
实现随机排序_示例代码
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1
//通过随机产生0到1的数,然后判断是否大于0.5从而影响排序,产生随机性的效果。
}
var arr = [1, 2, 3, 4, 5]
arr.sort(randomsort)
数组拼接方法
concat()
可用于拼接数组,也可传入数组,会把数组元素取出并拼接 无法拼接多维数组,返回一个新数组
ES6展开拼接
[...arr,...arr2]
数组删改方法
slice()
选择数组的一部分,并返回【新数组】
参数
start,end,参数无法交换位置,不传参数则拷贝原数组
截取规则: [),左闭右开,从左开始在右前停止,例如:
const arr = [1,2,3,4,5] arr.slice(2,4) // 3,4
作用2:
将字符串转为数组
Array.prototype.slice.call(str)
splice()
从数组中添加/删除元素组成的数组,返回值是添加/删除元素组成的数组,没有添加/删除的话返回空【会改变原数组】
参数
1.必选参数,index,规定从何处添加/删除元素
2.可选参数,规定应该删除元素的个数/长度【区别于slice()的下标左闭右开】,可以为0,如未填写参数,则删除从index到数组结尾所有元素
3.可选参数,想要添加到数组的新元素
fill()
填充,将一个固定值替换数组的元素,闭合位置同样遵循【左闭右开】【会改变原数组】
Es6方法
参数
1.必需参数,填充值
2.可选参数,开始填充位置
3.可选参数,停止填充位置
数组索引方法
indexOf()
可返回数组中某个指定的元素首次出现的索引
参数
1.必选参数,检索内容
2.可选参数,开始检索的位置
lastIndexOf()
同indexOf()方法,不过查找方向相反
includes()
用来判断数组是否包含一个指定的值,包含返回true,否则false
find()
返回数组中第一个符合条件的元素的值,如果没有符合条件的元素返回 -1
参数
1.必选参数,回调函数
2.可选参选,传递一个对象作为该回调函数的this指向,如果这个参数为空,"undefined"会传递给"this"值
findIndex()
返回数组中第一个符合条件的元素的索引,如果没有符合条件的元素返回 -1
参数
1.必选参数,回调函数
2.可选参选,传递一个对象作为该回调函数的this指向,如果这个参数为空,"undefined"会传递给"this"值
at()
at() 方法接收一个整数值并返回该索引的项目,允许正数和负数
ES2022
参数
要返回的数组元素的索引(位置)。当传递负数时,支持从数组末端开始的相对索引;也就是说,如果使用负数,返回的元素将从数组的末端开始倒数。
创建数组方法
Array.of()
【ES6】创建数组,参数及为数组元素
ES5使用new Array()构造数组的时候,会有歧义
Array(3),当参数只有一个时,创建length为3的空数组
Array(3,4,5),当参数大于两个时,将参数连接创建为数组,会有歧义
静态方法,于构造器内部,只能通过Array调用
Array.from()
【ES6】将类数组对象转为真正的数组对象,也是Es6对于之前处理方式的优化
Es6之前,需要使用Array.prototype.slice.call(str)将类数组转化为数组
...数组展开实际上就是对Array.from()的封装
Array.from()方法转出的对象,为克隆出来的深拷贝对象
静态方法,于构造器内部,只能通过Array调用
示例代码
console.log(Array.from(arr) === arr) // false 深拷贝
keys()
【ES6】返回一个新的【数组迭代器】对象,该对象包含数组中每个索引的键,可用循环遍历该对象
原型方法
Object对象原型上也有该方法,
是静态方法,需要通过Object调用
values()
【ES6】返回一个新的【数组迭代器】对象,该对象包含数组中每个索引的值,可枚举,可用循环遍历该对象
原型方法
Object对象原型上也有该方法,
是静态方法,需要通过Object调用
entries()
【ES6】返回一个新的【数组迭代器】对象,该对象包含数组中每个索引的键值对,可枚举,可用循环遍历该对象
原型方法
Object对象原型上也有该方法,
是静态方法,需要通过Object调用
数组循环遍历方法
forEach()
用于调用数组的每个元素,并将元素传递给回调函数
forEach()方法没有返回值,无法跳出循环
参数
1.必选参数,数组中每个元素都会调用的回调函数,函数参数:item【当前元素】,index【当前索引】,arr【当前遍历数组本身】
2.可选参选,传递一个对象作为该回调函数的this指向,如果这个参数为空,"undefined"会传递给"this"值
示例代码
// forEach方法的第二个参数
const arr = [1,2,3]
const out = []
arr.forEach(function(item){
this.push(item)
},out) // 改变this为out,调用out原型push方法
const obj = {
name: 'obj',
number: [0,1,2,3,4,5,6,7,8,9],
print(){
console.log(this) // obj
this.number.forEach(function(){
console.log(this) // 原先为window
},this) // obj,也可用箭头函数绑定外部作用域this
}
}
obj.print()
arr.forEach(function(){
console.log(this) // arr
},arr)
注意
1.forEach()方法会忽略稀疏数组中为空的元素[1,,3],跳过执行,不会调用forEach方法 即,稀疏元素不具有迭代器
// 稀疏数组 delete arr[1] // delete方法删除数组元素也会创建稀疏数组 console.log(arr.length)
2.类数组对象无法遍历
但可通过call去强行指定
Array.prototype.forEach.call(argument,function(){...})
3.遍历方法对于空数组不会执行回调,因为其内部没有迭代器
map()
返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
呈映射关系
参数
1.必选参数,数组中每个元素都会调用的回调函数,函数参数:item【当前元素】,index【当前索引】,arr【当前遍历数组本身】
2.可选参选,对象作为该执行回调时使用,传递给函数,用作"this"的值,如果省略,或者传入null、undefined,那么回调函数的 this 为全局对象
拓展
1.我貌似很少使用这种写法存储返回值,以后多用用
2.let str = arr.map((item)=>{ return item * 2 })
3.maxTmp.length-1
获取数组最后一位
filter()
创建一个新的过滤数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
参数
1.必选参数,数组中每个元素都会调用的回调函数,函数参数:item【当前元素】,index【当前索引】,arr【当前遍历数组本身】
2.可选参选,对象作为该执行回调时使用,传递给函数,用作"this"的值,如果省略,或者传入null、undefined,那么回调函数的 this 为全局对象
拓展
1.Number.isInteger()方法
用来判断给定的参数是否为整数,除此之外,都是返回false(NaN或Infinity,空串等也是)
2.我很少用的写法,给变量赋值函数的返回值
let arr = xx.filter(item => return item > 3)
some()
用于检测数组中的元素是否满足指定条件
如果【有一个】元素满足条件,则表达式返回true,剩余的元素不会再执行检测
如果没有满足条件的元素,则返回false
不会对空数组进行检测
参数
1.必选参数,数组中每个元素都会调用的回调函数,函数参数:item【当前元素】,index【当前索引】,arr【当前遍历数组本身】
2.可选参选,对象作为该执行回调时使用,传递给函数,用作"this"的值,如果省略,或者传入null、undefined,那么回调函数的 this 为全局对象
every()
用于检测数组【所有元素是否都符合指定条件】
如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测
如果所有元素都满足条件,则返回true 不会对空数组进行检测
参数
1.必选参数,数组中每个元素都会调用的回调函数,函数参数:item【当前元素】,index【当前索引】,arr【当前遍历数组本身】
2.可选参选,对象作为该执行回调时使用,传递给函数,用作"this"的值,如果省略,或者传入null、undefined,那么回调函数的 this 为全局对象
与some()的区别
every()相当于&&,需要全部数组元素都满足条件才返回true