定义
数组的标准定义:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。
数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
内置方法
concat / slice / splice
sort / reverse
shift/ unshift
pop / push
toString
join
从已有的数组创建新的数组
concat / slice / splice
concat 合并两个或多个数组,返回合并结果
不改变原有数组,返回一个新的合并数组
arrayObject.concat(arrayX,arrayX,......,arrayX),
arrayX可以是值/数组对象
slice 从现有的数组返回选定的元素组成的数组 不改变原有数组
arrayObject.slice(start,end) start 和 end 定义了选取范围,正数从0开始,负数从-1开始,始终为左闭右开,也就是左边包含右边不包含
splice 方法向/从数组中添加/删除项目,然后返回被删除的项目组成的新数组 会改变原有数组
arrayObject.splice(index,howmany,items,...)
index 起始位置,可以是负数
howmany 要删除的个数,0为不删除
items 要添加的元素
数组排序
sort / reverse
sort 用于对数组的元素进行排序
将对原数组操作,会改变原数组
arrayObject.sort(sortFn)
sortFn 为函数,用于提供排序比较规则,返回值是正值,则第一个参数比第二个大,负值,则第1个比第2个小,零,则两个数相等
如果sortFn为空,则按照字符编码的顺序进行排序
reverse 用于颠倒数组中元素的顺序 会改变原有的数组
为数组增减元素
push 添加 元素至数组尾部,返回新的数组长度
unshift 添加 元素至数组开头,返回新的数组长度
pop 删除 尾部元素,返回删除的元素
shift 删除 头部元素,返回删除的元素
都是直接对原数组操作,会改变原有数组
数组转字符串
toString / join
ES5新增
Array.isArray()
[].indexOf() / [].lastIndexOf()
[].forEach / [].map()
[].every() / [].some()
[].filter()
[].reduce() / [].reduceRight()
数组类型判断
自定义一个方法来判断是否为数组
ES5新增 Array.isArray() 来判断是否为数组
查找元素
indexOf(el, startIndex) / lastIndexOf(el, lastIndex)
没有查找到元素返回-1,查找到元素,返回查找到的第一个的索引值,lastIndexOf 为从后面查起
startIndex 表示从哪个索引开始找,默认为第1个索引
lastIndex 表示从倒数第几个索引开始找,默认为最后一个索引
数据遍历
[].forEach() / [].map()
[].forEach(function(value, index, arr){}, context)
循环遍历数组中的每一个元素,处理函数中的参数依次为:当前元素、当前元素索引、原数组
forEach的第二个参数,可以指定处理函数中this的指向
jQuery中的 $.each(function(index, values, arr){}) 回调中的参数第1个是索引,第2个是元素,$.map() 亦是如此
map(function(value, index, arr){}) 与forEach类似,返回一个新的数组,不改变原有数组
map的回调处理函数一定要有返回值,如果没用,则会返回undefined
检测是否包含某元素
[].every(function(value, index, arr){}, context) / [].some(function(value, index, arr){}, context)
数组元素的逻辑判定,回调函数返回true/false
some是所判定的元素只要数组中有一个符合条件就返回true
ervery是数组中必须所有元素都符合条件就返回true,否则返回false
在空数组上调用every返回true,some返回false
数组过滤
[].filter(fn, context)
当遍历元素时,fn返回true,则返回这个元素,否则不返回,fn中返回值只要弱等于true或false即可,使用==比较
filter返回一个新的结果数组,不改变原有数组
数组聚合
[].reduce(fn, initialValue) / [].reduceRight(fn, initialValue)
将数组元素聚合(合并)为一个元素
fn 的参数依次为 (之前值、当前值、索引值、数组本身),
initialValue 表示最初的值,如果不存在,初始值为数组第1个元素
reduceRight 与 reduce 用法一致,区别是从最后一个元素开始迭代
数组转换
Array.from(arrLike) / Array.of(...args)
Array.from 可以将类数组(有length属性的Object/可遍历(iterable)的对象/Set对象/Map对象)转换为数组
Array.of 用于将一组值转换为数组
使用 Array 的构造函数初始化数组时,如果参数是1个,那么会创建这个参数长度的数组,数组的每一项为 undefined,如果参数是多个,那么会创建这多个参数组成的数组,所以参数的个数会导致结果的不一致,Array.of 正是弥补这一点的扩展