首页 > 技术文章 > Array方法小记

65Seeker 2019-05-14 15:17 原文

尽量使用数组字面量"[]"创建数组,因为使用Array构造函数在不同的参数情况下会导致返回结果不一致。

数组的许多方法返回值仍然为数组,所以我们可以链式调用。

 

静态方法:

Array.isArray() 返回布尔值,用于识别数组类型,弥补typeof运算符的局限。

 

实例方法:

push() 数组末端添加一个或者多个元素,返回数组长度,改变原数组
pop() 数组末端删除一个或者多个元素,返回该元素,改变原数组  //stack栈结构 先进后出
shift() 数组始端删除一个或者多个元素,返回该元素,改变原数组  //queue队列结构 先进先出
unshift() 数组始端添加一个或者多个元素,返回数组长度,改变原数组
join()   参数将作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。改变原数组
如果数组成员有undefined,null或者空位,返回会被转成空字符串。[undefined, null].join('#')  // '#'
通过call方法,这个方法也可以用于字符串或类似数组的对象。Array.prototype.join.call('hello', '-')  // "h-e-l-l-o"
contact() 使多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,不会改变原数组。
如果数组成员包括对象,concat方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是新数组拷贝的是对象的引用。
reseve() 颠倒排列数组元素,返回改变后的数组,改变原数组。
slice() 提取目标数组的一部分,返回一个新数组,不会改变原数组。
两个参数,第一个起始,第二个终止,返回值包前不包后,若仅有一个参数,返回值包到底。
如果slice方法的参数是负数,则表示倒数计算的位置。  var a = ['a', 'b', 'c'];  a.slice(-2, -1) // ["b"]
slice方法的一个重要应用,是将类似数组的对象转为真正的数组。
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })  // ['a', 'b']
splice()  删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。改变原数组。
第一个参数起始(也可以为负数),第二个参数为删除个数,随后的x个参数都为新增的元素。
如果只是单纯地插入元素,splice方法的第二个参数可以设为0。a.splice(1, 0, 2) // []  a // [1, 2, 1, 1]
sort() 对数组成员进行排序,默认是按照字典顺序排序,所以101排在11的前面。排序后,改变原数组。
如果需要自定义排序,可传入一个函数作为参数,参数函数本身接受两个参数,表示进行比较的两个数组成员。
如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。
map() map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。不会改变原数组。
第一个参数为函数,该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
第二个参数可选,用来绑定回调函数内部的this。var arr = ['a', 'b', 'c'];  [1, 2].map(function (e) {return this[e];}, arr)// ['b', 'c']
如果数组有空位,map方法的回调函数在这个位置不会执行,会跳过数组的空位。
map方法不会跳过undefined和null,但是会跳过空位。[1, null, 2].map(f) // ["a", "a", "a"]   [1, , 2].map(f) // ["a", , "a"]
forEach() 没有返回值,参数以及跳过空位特性和map()一致。不会改变原数组。
如果遍历数组需要得到返回值,用map方法,只需要操作修改原数组,用forEach方法。
forEach()无法中断执行,必须将所有成员遍历一遍。如果在特定情况中断遍历,需要使用for循环。
filter()  用于过滤数组成员,将return为true,满足条件的成员组成新数组返回。不会改变原数组。
第一个参数为函数,该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
第二个参数可选,用来绑定回调函数内部的this。
reduce() 从左到右操作数组的每个元素,最终累计成一个值。
第一个参数为函数,函数接收四个参数,前两个必选,后两个可选
①累积变量,默认为数组的第一个成员;②当前变量,默认为数组的第二个成员;③当前位置(从0开始);④原数组
第二个参数可选,相当于函数的初始默认值。
reduceRight() 从右到左操作数组的每个元素,最终累计成一个值。参数同上。
indexOf() 参数为数组元素,返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
lastIndexOf() 参数为数组元素,返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。
valueOf() 返回数组本身。
toString()  返回数组字符串形式。

 

推荐阅读