一组有序排列的数据集合,集合的每个值称为元素,元素可以是任意数据类型
创建
构造函数语法
let arr = new Array()
- 如果传入的是数字,则创建一个长度是该数字的数组;如果传入其他的类型,则创建包含这个值的只有一项的数组
- 也可以省略 new 操作符,结果一样
数组字面量语法
let arr = [1, 2, 3.14, 'hello', null, true]
二维数组
let arr = new Array(m).fill(0).map(() => new Array(n).fill(0))
数组的属性
length
- 给数组长度赋值会导致数组长度发生变化:
- 对数组进行越界赋值也会导致数组长度变化:
其他属性
- 数组也是对象,也可以添加其他属性,但是针对数组的优化就不再适用了
常规 for 遍历
for (let i = 0; i < arr.length; i++)
:运行最快,兼容性最好for (let item of arr)
:现代语法,只能访问数组的元素值for (let i in arr)
:性能差,会遍历出其他属性(不要用)
数组的空位
某个位置没有任何值,如:[1, ,3]
(注意等于 undefined 依然是有值的)
不同方法对空位处理不一样:
- 跳过空位:
forEach()
,filter()
,reduce()
,every()
,some()
- 循环时跳过,结果中保留:
map()
- 不跳过,看作 undefined:
join()
,toString()
,from()
,扩展运算符...
,for循环
,for...of
,entries()
,keys()
,values()
,find()
,findIndex()
类数组对象
具有索引和 length 属性的对象,可以使用索引访问元素,但是没有数组的方法
如:字符串,函数体内的 arguments 对象
常用方法
判断
Array.isArray ( value )
:判断 value 是否是一个数组,是返回 true,否返回 false
创建
Array.from ( arrayLike[, mapFn[, thisArg]] )
:从类数组或可迭代对象创建新的的数组(浅拷贝)
mapFn:新数组中每个元素会执行该回调函数
thisArg:mapFn 的 this 对象
Array.of ( ele0, ele1... )
:创建一个由传入的参数组成的数组
改变原数组
push ( ele0, ele1, ... )
:将一个或多个元素添加到末尾,返回数组的长度pop ( )
:删除最后一个元素,返回该元素的值unshift ( ele0, ele1, ... )
:将一个或多个元素添加到开头,返回数组的长度shift ( )
:删除第一个元素,返回该元素的值reverse ( )
:颠倒数组中元素的位置sort ( [compareFn] )
:对数组进行排序(默认转为字符串,按 UTF-16 字符集编号排序)
compareFn ( a, b ):可选传入的自定义排序函数,compareFn < 0:a 排列在 b 之前
splice ( start[, deleteCount[, item1, ...]] )
:同时删除和添加元素
start:开始的位置(从 0 开始)。可以为负数,表示倒数第几个
deleteCount:删除多少个元素(从 start 开始)
item:要插入的元素(在 start 处开始插入)
返回由被删除元素所组成的数组
不改变原数组
at ( index )
:查找索引处的元素,没找到返回 undefined
index 可以为负数,表示倒数第几个
-
concat ( item0, item1, ... )
:合并其他数组或值到数组上(浅拷贝),返回新数组 -
join ( [separator] )
:按指定分隔符连接数组中的元素(默认逗号),返回字符串 -
slice ( start[, end] )
:提取数组中[ start, end )
的元素(浅拷贝),返回新数组
包括 start,不包括 end,start 默认 0,end 默认末尾
可以为负数,表示倒数第几个
indexOf ( ele[, start] )
:查找指定元素在数组中第一次出现的索引,从前向后
start:可以指定开始查找的位置,不存在返回 -1,可以为负数,表示倒数第几个
lastIndexOf ( ele[, start] )
:查找指定元素在数组中最后一个的索引,从后向前
start:可以指定开始查找的位置,不存在返回 -1,可以为负数,表示倒数第几个
includes( searchElement, fromIndex )
:找到了 searchElement,则返回 true,否则返回 false
fromIndex:开始查找的索引,可以为负数,表示倒数第几个
toString ( )
:返回由逗号分隔的数组元素的字符串(内部调用 join() 方法)
迭代方法
对数组中的每个元素依次执行一次给定函数
value:当前正处理的元素
index:该元素的索引
array:当前正在操作的数组
-
forEach ( callback(vaule, index, array) )
:返回 undefined -
map ( callback(vaule, index, array) )
:返回每次函数调用结果组成的新数组 -
filter ( callback(vaule, index, array) )
:返回 callback 函数会返回 true 的项组成的新数组 -
some ( callback(vaule, index, array) )
:callback 有一个返回 true 则立即返回 true,如果全部返回 false 则返回 false -
every ( callback(vaule, index, array) )
:callback 每一项都返回 true,则返回 true,有一个返回 false 则立即返回 false -
find ( callback(vaule, index, array) )
:返回数组中满足 callback 函数的第一个元素的值,否则返回 undefined -
findIndex ( callback(vaule, index, array) )
:返回数组中满足 callback 函数的第一个元素的索引,否则返回 -1 -
reduce ( callback(pre, cur, index, array), initialValue )
:
每一次运行 callback 会将先前元素的计算结果作为参数传入
pre:上一次执行函数的结果
cur:当前处理的元素
initialValue:可设置初始值,设置后遍历从第 0 个元素开始,不设置从第 1 个开始
返回函数累计处理的结果
NOTE
遍历方式:如果需要用到遍历后的数组则用 map,如果不是则用 for…of 或者 forEach(),其中 forEach 可以访问索引