概念

js中的数组严格来说应该称作对象,是特殊的js对象,在内部被归类为数组。

创建数组的几种方式

  1. var arr = []
  2. var arr = new Array(args),参数args传入的不同,新建数组页不一样:
    1. 作为新数组初始化数据: new Array(element0, element1[, ...[, elementN]]);
    2. 作为作为新数组的长度: var arr = new Array(arrayLength);
  3. Array.of() ,返回由所有参数值组成的数组,如果没有参数,就返回一个空数组;
  4. Array.from ,可以将如下两种参数转成数组 :
    1. 类数组,如 var obj={0: 'a', 1: 'b', length: 2}
    2. 部署了 Iterator 接口的数据类型
      1. 字符串
      2. Set
      3. NodeList

如何判断数组类型

在js中判断数组类型其实并不容易,因为:typeof arr === 'object'。好在es6数组的新方法Array.isArray()解决了这一问题。
那么,没有这个方法前我们是如何判断一个变量是不是数组呢?

  1. var isType = function(type) {
  2. return function(x) {
  3. return Object.prototype.toString.call(x).toLocaleLowerCase() === '[object '+ type.toLocaleLowerCase() + ']';
  4. }
  5. }
  6. var isArray = isType('array')

API大全

API按照【会改变原数组的值】【不会改变原数组】【数组的遍历】分成三类。

改变原数组

改变原数组
splice
使用
向/从数组中添加/删除项目
array.splice(index,howmany,item1,....itemX)
参数 返回值

1. index :必需。整数,规定添加/删除项的位置,使用负数可从数组结尾处规定位置。
1. howmany :可选。要删除的项数量。如果设置为 0,则不会删除项。
1. item1, ..., itemX : 可选。向数组添加的新项。
如果有元素被删除,返回包含被删除项的新数组。


pop
使用
删除一个数组中的最后的一个元素
array.pop()
参数 返回值
返回这个元素


shift
使用
删除数组的第一个元素
array.shift()
参数 返回值
返回这个元素


push
使用
向数组的末尾添加一个或多个元素
array.push(item1,....itemX)
参数 返回值

1. item1, ..., itemX : 可选。向数组添加的新项目。
返回新的长度


unshift
使用
向数组的开头添加一个或更多元素
array.unshift(item1,....itemX)
参数 返回值

1. item1, ..., itemX : 可选。向数组添加的新项目。
返回新的长度


copyWithin
使用
在当前数组内部,将指定位置的成员复制到其他位置
array.copyWithin(target, start = 0, end = this.length)
参数 返回值
三个参数都是数值,如果不是,会自动转为数值
1. target(必需):从该位置开始替换数据。如果为负值,表示倒数。
1. start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
1. end(可选):到该位置前停止读取数据,默认等于数组长度。使用负数可从数组结尾处规定位置。
返回改变后的数组


fill
使用
使用给定值,填充一个数组
array.fill()
参数 返回值

1. 第一个元素(必须): 要填充数组的值
1. 第二个元素(可选): 填充的开始位置,默认值为0
1. 第三个元素(可选):填充的结束位置,默认是为this.length
返回填充后的数组


reverse
使用
颠倒数组中元素的顺序
array.reverse()
参数 返回值
返回倒序的数组


sort
使用
排序
array.sort()
参数 返回值

1. 规定排序顺序的比较函数
返回排序后数组

不改变原数组

不改变原数组


slice
使用
浅拷贝数组的元素
array.slice(begin, end)
参数 返回值

1. begin(可选): 索引数值,接受负值,从该索引处开始提取原数组中的元素,默认值为0。
1. end(可选):索引数值(不包括),接受负值,在该索引处前结束提取原数组元素,默认值为数组末尾(包括最后一个元素)。
返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象,且原数组不会被修改


join
使用
把数组中的所有元素通过指定的分隔符进行分隔放入一个字符串
array.join(str)
参数 返回值

1. str (可选) :指定要使用的分隔符,默认使用逗号作为分隔符。
返回生成的字符串


toLocaleString
使用
数组转字符串
array.toLocaleString()
参数 返回值
返回一个表示数组元素的字符串


toString
使用
数组转化成字符(不推荐)
array.toString()
参数 返回值
返回一个表示数组元素的字符串


cancat
使用
方法用于合并两个或多个数组
array.cancat(array1,array2,......,arrayX)
参数 返回值

1. arrayX (必须):该参数可以是具体的值,也可以是数组对象。可以是任意多个。
返回一个新数组

遍历数组

遍历数组
forEach 使用
从头到尾遍历数组,为每个元素调用指定的函数
array.forEach(callback, thisArg[)
参数 返回值

1. callback: 为数组中的每个元素执行的函数,接收三个参数:
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined
返回 undefined


map
使用
创建一个新数组,其结果是该数组中的每个元素都调用一个callback函数后的返回结果
array.map(callback, thisArg[)
参数 返回值

1. callback: 生成新数组元素的函数,使用三个参数这个函数跟forEach()的函数不同的是,传递给map()的函数应该有返回值。
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined
一个新数组,每个元素都是回调函数的结果


filter
使用
按照一定规则筛选数组中元素
array.filter(callback, this.Arg[)
参数 返回值

1. callback: 用来测试数组的每个元素的函数。返回true表示保留该元素(通过测试),false则不保留。它接受三个参数:
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined
返回过滤后的新数组


every
使用
测试数组的所有元素是否通过了制定函数的测试
array.every(callback, thisArg[)
参数 返回值

1. callback: 用来测试数组的每个元素的函数。返回true表示保留该元素(通过测试),false则不保留。它接受三个参数:
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined
一个布尔值,当所有的元素都符合条件才返回true,否则返回false
some
使用
测试数组的某些元素是否通过了制定函数的测试。
array.some(callback, thisArg[)
参数 返回值

1. callback: 用来测试数组的每个元素的函数。返回true表示保留该元素(通过测试),false则不保留。它接受三个参数:
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined
只要数组中的任意一个元素在回调函数中返回的是真值,就返回true,否则为false


reduce
reducRight
使用
这两个方法使用指定的函数将数组元素进行组合,生成单个值。
array.every(callback, initValue)
参数 返回值

1. callback 执行数组中每个值的函数,包含四个参数:
1. accumulator 累加器累加回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(如下所示)。
1. currentValue 数组中正在处理的元素。
1. currentIndex (可选) 数组中正在处理的当前元素的索引。 如果提供了initialValue,则索引号为0,否则为索引为1。
1. array (可选) 调用reduce的数组
2. initialValue (可选) 用作第一个调用 callback的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
函数累计处理的结果


indexOf
使用
查找数组是否存在某个元素
array.indexOf(searchElement, fromIndex=0)
参数 返回值

1. searchElement(必须):被查找的元素
1. fromIndex(可选):开始查找的位置(不能大于等于数组的长度,返回-1),接受负值,默认值为0。
返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1


lastIndexOf
使用
查找制定元素的在数组中的最后一个位置
array.lastIndexOf(searchElement, fromIndex=-1)
参数 返回值


includes
使用
查找数组是否包含某个元素
array.includes(searchElement, fromIndex=0)
参数 返回值

1. searchElement(必须): 被查找的元素
1. fromIndex(可选): 默认值为0,参数表示搜索的起始位置,接受负值。正值超过数组长度,数组不会被搜索,返回false。负值绝对值超过长数组度,重置从0开始搜索。
返回一个布尔值


find
findIndex
使用
搜索指定元素
array.find(callback, thisArg[)
搜索指定元素的索引
array.findIndex(callback, thisArg[)
参数 返回值

1. callback: 用来测试数组的每个元素的函数。返回true表示保留该元素(通过测试),false则不保留。它接受三个参数:
1. currentValue 数组中正在处理的当前元素;
1. index 数组中正在处理的当前元素的索引;
1. array 正在操作的数组;
2. thisArg:(可选)当执行回调函数时用作this的值(参考对象)。默认 undefined

1. find 方法,当某个元素通过 callback 的测试时,返回数组中的一个值,否则返回 undefined。
1. findIndex方法,返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。