引言
在正式进入主题之前,先给大家介绍基本JS数据类型及存储位置
栈内存:存储有序即一个挨着一个存储;堆内存:存储无序
原始值:number、string、null、undefined、boolean,存储在栈内存
引用值:array、object、function () {}、Date、RegExp(),存储在堆内存
正文
数组常用方法
push:数组尾部添加一个或者多个元素,参数为要添加的元素,返回值为添加后数组长度(改变原数组)
var arr = [1, 2, 3];
console.log(arr.push(4, 5, 6))//6
console.log(arr)//[ 1, 2, 3, 4, 5, 6 ]
unshift:数组头部添加一个或者多个元素,参数为要添加的元素,返回值为添加后数组长度(改变原数组)
var arr = [1, 2, 3];
console.log(arr.unshift(4, 5, 6))//6
console.log(arr)//[ 4, 5, 6, 1, 2, 3 ]
pop:删除数组尾部一个元素,没有参数,返回值为被删除的元素(改变原数组)
var arr = [1, 2, 3];
console.log(arr.pop())//3
console.log(arr)//[ 1, 2 ]
shift:删除数组头部一个元素,没有参数,返回值为被删除的元素(改变原数组)
var arr = [1, 2, 3];
console.log(arr.shift())//1
console.log(arr)//[ 2, 3 ]
join:将数组元素用join参数拼接成字符串,参数为字符串,返回值为拼接后新的字符串(不改变原数组)
var arr = [1, 2, 3];
console.log(arr.join(","))//"1,2,3"
console.log(arr)//[ 1, 2, 3 ] 不改变原数组
注:如果想直接将数组转换成字符串,参数直接为空即可
var arr = [1, 2, 3];
console.log(arr.join(""))//"123"
reverse:颠倒数组元素顺序,无参数,返回值为颠倒后的新数组(改变原数组)
var arr = [1, 2, 3];
console.log(arr.reverse())//[ 3, 2, 1 ]
console.log(arr)//[ 3, 2, 1 ] 会改变原数组
slice(startIndex,endIndex):从起始索引开始截取到终止索引之前(左闭右开),参数为起始索引、终止索引,返回值为被截取部分数组(不会改变原数组)
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.slice(1, 2))//[ 2 ]
console.log(arr)//[ 1, 2, 3, 4, 5, 6, 7 ] 不会改变原数组
splice(startIndex,num,item1,item2...):在原数组中添加并删除元素,参数为删除的起始索引StartIndex、删除的数量num,要添加的一个或者多个元素,返回值为(改变原数组)
添加元素位置:总是在startIndex的位置开始添加!!!但是如果starIndex大于等于原数组长度,删除的子数组为空,默认在数组最后一位开始添加
startIndex:必填,如果穿undefined、null默认为0
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.splice(3, 4, 8, 9))//[] 被删除的子数组为空
console.log(arr)//[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 原数组直接添加
num:必填,如果传null、undefined默认不执行删除操作,直接在startIndex位置添加
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.splice(0,undefined, 8, 9))//[] 被删除的子数组为空
console.log(arr)//[ 8, 9, 1, 2, 3, 4, 5, 6, 7 ] 原数组直接添加
splice(startIndex,num):在原数组中删除元素,参数为要删除的起始索引、删除的数量,返回值为被删除的子数组(改变原数组)
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.splice(0, 2))//[ 1, 2 ] 被删除的子数组
console.log(arr)//[ 3, 4, 5, 6, 7 ] 删除后的子数组
concat:将多个数组拼接成一个数组,参数为一个或多个数组或者元素,返回值为拼接后的新的数组(不改变原数组)
var arr = [1, 2, 3];
console.log(arr.concat([4,5], 6, 7))//[ 1, 2, 3, 4, 5, 6, 7 ]拼接后的数组
console.log(arr)//[ 1, 2, 3 ] 不改变原数组
indexOf:从数组头部开始查找数组内第一次出现参数元素出现的下标,参数为要查找的元素,如果要查找的元素存在返回值为对应下标,要查找的元素不存在返回值为-1(不改变原数组)
var arr = [1, 2, 3, 1];
console.log(arr.indexOf(10))//-1
console.log(arr.indexOf(1))//0
console.log(arr)//[ 1, 2, 3, 1 ]
lastIndexOf:与indexOf功能相同,查找方向相反,从数组尾部开始查找
var arr = [1, 2, 3, 1];
console.log(arr.lastIndexOf(10))//-1
console.log(arr.lastIndexOf(1))//3
console.log(arr)//[ 1, 2, 3, 1]
数组的迭代方法
forEach:遍历数组,没有返回值
var arr = [1, 2, 3];
arr.forEach((ele, index, self) => {
})
console.log(arr)//[ 1, 2, 3 ]
filter:遍历数组,返回值为 该数组每一项处理函数返回值为true的对应数组元素组成的数组 数组
var arr = [1, 2, 3];
var result = arr.filter((ele, index, self) => {
return ele > 2;
})
console.log(result)//[ 3 ]
console.log(arr)//[ 1, 2, 3 ]
every:遍历数组,返回值为boolean值,如果数组的每一项的处理函数都返回true,则函数返回true
var arr = [1, 2, 3];
var result = arr.every((ele, index, self) => {
return ele > -1;
})
console.log(result)//true
console.log(arr)//[ 1, 2, 3 ]
some:遍历数组,返回值为boolean值,如果数组有一项的处理函数都返回true,则函数返回true
var arr = [1, 2, 3];
var result = arr.some((ele, index, self) => {
return ele > 2;
})
console.log(result)//true
console.log(arr)//[ 1, 2, 3 ]
map:遍历数组,返回值为 数组每一项处理函数返回值 组成的数组
var arr = [1, 2, 3];
var result = arr.map((ele, index, self) => {
return ele * 2;
})
console.log(result)//[ 2, 4, 6 ]
console.log(arr)//[ 1, 2, 3 ]