数组方法大全
(一)检测方法
检测一个对象是否为一个数组
① instanceof 操作符
let arr = [] arr instanceof Array // true
② Array.isArray( )
let arr = [] Array.isArray(arr) // true IE9以下不支持该方法
(二)转换方法
① toString( )
var arr = [1,2,3,4]; console.log(arr.toString()); // '1,2,3,4'
② join( )
将数组转换为字符串,默认情况下与toString()的结果一致,不一样的是join()方法可以指定具体的分隔符,分隔符作为方法的实参以字符串形式传入。
③ valueOf( )
返回原数组
(三)栈方法
① push( )
可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度,该方法会改变原数组。
② pop( )
从数组末尾删除一个元素,返回被删除的元素,该方法会改变原数组。
(四)队列方法
① shift( )
删除数组的第一个元素,并将该元素返回,该方法会改变原数组。
② unshift( )
在数组开头添加一个或多个元素,并返回新数组的长度,该方法会改变原数组。
(五)重排序方法
① reverse()
反转数组,并返回反转后的数组,该方法会改变原数组。
② sort()
用于对数组元素进行排序,默认按照Unicode编码进行升序排列,除此之外还可以自定义排序,这时需要一个回调函数作为方法的参数,函数需要两个形参。该方法会改变原数组。
排序原理:回调函数会执行很多次(具体根据数组的复杂程度而言),每次都随机的抽出数组的两个元素a,b作为实参,按照原数组的顺序,a一定在b前面,如果结果大于0,则交换位置;结果等于0,则证明a与b相等,不交换位置;如果小于0,则a与b不交换位置。
var arr = [2,3,1,5,4]; arr.sort(function(a,b){ return a-b;//降序改为b-a })
(六)操作方法
①concat( )
先复制当前数组,然后再把实参添加至新创建的数组中,并返回新的数组,该方法不会改变原数组。
var arr = [1,2,3,4,5]; arr.concat();//复制arr数组 arr.concat(6,7,8);//将6,7,8三个元素添加至新创建的数组末尾
②slice( )
用于截取数组,该方法需要两个参数,第一个参数表示截取的开始索引位置(包括),第二个参数表示截取的结束位置(不包括),其中,第二个参数不是必要的,如果没有第二个参数,则默认从开始索引开始截取至结尾。该方法不会改变原数组,只是将截取的元素储存于一个新的数组中,并返回这个数组。
var arr = [2,1,3,2,4]; arr.slice(1); //[1,3,2,4] arr.slice(1,2); //[1]
③splice()
这个方法有以下三种功能:
删除:可以删除任意数量的元素,只需指定两个参数,要删除的第一个元素的索引和要删除的数量。
var arr = [2,1,3,2,4]; arr.splice(0,2);//代表从索引为0的元素开始往后删除两个元素,返回被删除的元素所组成的数组:[2,1]
插入:可以指定位置插入任意数量的元素,需要提供三个参数,起始位置、0(要删除的数量)、要插入的元素。
var arr = [2,1,3,2,4]; arr.splice(0,0,5);//代表从索引为0的位置前面插入一个元素5,返回的是一个空数组(因为没有删除元素)
替换:可以向指定位置插入任意数量的元素,且同时删除任意数量的元素,需要三个参数,起始位置、要删除的数量和要插入任意数量的元素。
var arr = [2,1,3,2,4]; arr.splice(2,2,6);//从索引为2的位置开始删除两个元素,返回被删除的元素,然后由第三个参数替换被删除元素所在的位置
注意:该方法始终都会返回一个数组,该数组中包含从原数组中删除的元素,如果没有删除任何元素,则返回一个空数组。
(七)位置方法
① indexOf( )
查找数组中的元素(全等比较),一旦找到则返回这个元素在数组中的索引,如果没有找到则返回-1。
② lastIndexOf( )
与indexOf()基本一致,不同的是该方法是从数组的末尾开始寻找。
(八)迭代方法
① every( )
② some( )
对数组中的每一个元素运行回调函数,如果该函数对任意一个元素返回true,则返回true。
③ filter( )
filter意为过滤的意思,在这里也正是过滤的作用,利用回调函数过滤数组的某些元素(留下结果为 true 的元素),返回一个新的数组,该方法不会改变数组。
var arr = [2,1,3,2,3,4]; var result = arr.filter(function (item,index,array) { return item > 2; }); console.log(arr); //[2,1,3,2,3,4] console.log(result); //[3,3,4]
④ forEach( )
循环,太常用了这个~~
⑤ map( )
加工,每个元素都执行回调函数后返回的结果~
(九)归并方法
reduce( ) 与 reduceRight( )
这两个方法都会迭代数组的所有元素,然后构建一个最终返回的值。其中,reduce()方法从数组的第一个元素开始,逐个遍历到最后,而reduceRight()则从数组的最后一个元素开始,向前遍历。这两个方法都接收两个参数:一个是在每一个元素上运行的回调函数,另一个(可选的)作为归并基础的初始值。回调函数接收4个参数:前一个值,当前值,元素索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一个元素。
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); console.log(sum); //15
(十)ES 7 新增的方法 —— includes( )
用于检查数组中是否含有指定的元素,如果有则返回true。
let arr = [1,2,3,4,5] arr.includes(2) //true