一组有序排列的数据集合,集合的每个值称为元素,元素可以是任意数据类型

创建

构造函数语法

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

  • 给数组长度赋值会导致数组长度发生变化:
let arr = [1, 2, 3]
arr.length = 5 // arr => [1, 2, 3, , ,]
  • 对数组进行越界赋值也会导致数组长度变化:
let arr = [0, 1, 2]
arr[3] = 3 // arr => [0, 1, 2, 3]

其他属性

  • 数组也是对象,也可以添加其他属性,但是针对数组的优化就不再适用了

常规 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...ofentries()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 可以访问索引