关于ES三、ES五、ES6以及ES7全部数组的方法(api)的总结

原由:工做用常常用到操做数组的方法,这里进行一下总结,我尽可能以简洁的语言归纳每一个方法(api)的做用。若是您想快速定位,能够Control+F 而后搜相应的方法便可定位 ;)

ES3的数组方法


join();

  • 目的:将数组转化为字符串.
  • 参数:or可传一个参数(传超过1个的参数,默认取第一个参数), 参数为字符或字符串,参数将在数组的每一个元素的间隔插入。PS: 参数无的时候,数组元素间隔为 ','.
  • 是否改变原数组: 不改变原数组, 返回一个新的字符串.
  • 逆向操做:String.split().

reverse();

  • 目的:将数组中的元素颠倒顺序.
  • 参数:无(无视参数).
  • 是否改变原数组: 改变原来的数组.

sort();

  • 目的:将数组的元素按照必定规则排序.
  • 参数:or可传一个函数(传超过1个的函数,默认取第一个函数)。PS: 参数无的时候数组元素默认按照字母表顺序排序.
  • 函数参数:
    > 你必须给sort()方法传递一个比较函数,因此通常传递俩个参数.PS:第三个参数默认undefined.
    > 假设第一个参数应该在前,你应该返回一个小于0的数值,
    > 不然,你应该返回一个大于0的数值,
    > 假设俩个值相等(也就是说他们的排序可有可无),函数应该返回0.
    > PS:数组元素是从前到后 俩俩比较.es6

  • 是否改变原数组: 改变原来的数组.api

concat();

  • 目的:像胶水同样,将参数粘合在数组后面.
  • 参数:字符串数组(参数不限)。
    > 当参数为数组时,粘合的是数组的元素,而非数组自己.
    > 但此方法不会扁平化数组参数(换句话说,若是你的参数是个数组,里面又嵌套了超过1个数组,这个里面的数组的元素不会被提取出来粘合,而是整个数组被粘合在新的数组后面).
  • 是否改变原数组:不改变原数组, 返回一个新的数组.

slice();

  • 目的:返回数组的一个片断或子数组.
  • 参数:or一个参数or俩个参数
    > 无参数将原样返回一个新的数组,至关于复制了一遍数组.
    > 返回的数组包含第一个参数指定的位置,到第二个参数前面一个位置之间的全部元素.
    > 若是只指定一个参数,返回的数组将包含从开始位置到结尾的全部元素.
    > 若是参数中出现负数,它表示相对于数组中的最后一个元素的位置的个数.
  • 是否改变原数组: 不改变原数组, 返回一个新的数组.

splice();

  • 目的:从数组中删除元素、插入元素、或者同时完成这俩种操做.
  • 参数:前俩个参数指定了删除,从第三个参数开始,指定拼接
    > 第二个参数指定了应该从数组中删除元素的个数,若省略,从起始点到数组结尾的全部元素都将被删除.
    > 第三个参数开始,指被拼接到原数组的元素,区别于concat(), splice()会插入数组自己而非数组的元素(会扁平化数组)数组

  • 是否改变原数组: 改变原来的数组.函数

push()和pop();

  • 目的:向数组中插入或删除元素.
  • 参数:push()方法不限制参数,并不会扁平化数组。pop()方法无视参数.
  • 行为:相似栈,从尾部插入或删除值,push()方法返回数组长度,pop()方法返回被删除的值.
  • 是否改变原数组: 改变原来的数组.

unshift()和shift();

  • 目的:向数组中插入或删除元素.
  • 参数:unshift()方法不限制参数,并不会扁平化数组,当参数为一连串元素时,参数相似于被粘合在数组的头部,而不是改变参数的顺序。shift()方法无视参数.
  • 行为:俩组方法和上面的方法相似,区别在于这组方法是在数据的头部操做.
  • 是否改变原数组: 改变原来的数组.

toString()和toLocaleString();

  • 目的::将数组的每一个方法转化为字符串,而且输出用逗号分隔的字符串列表.
  • 参数:俩个方法无视参数.
  • 是否改变原数组: 不改变原数组, 返回一个新的字符串.

ES5的数组方法


map();

  • 目的:将数组的每一个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值.
  • 参数:一个带有return的函数(函数中的return的值将被传递给新数组).
  • 是否改变原数组: 不改变原数组,返回一个新数组。PS: 若是原数组是个稀疏数组,返回的也是相同方式的稀疏数组,它具备相同的长度,相同的稀缺元素.

filter();

  • 目的:将数组的每一个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值.
  • 参数:一个带有return的函数(函数中的返回值若是为true或者能转化为true的值,就被添加到这个数组).
  • 是否改变原数组: 不改变原数组,返回一个新数组,新数组是原数组的子集。PS: 若是原数组是个稀疏数组,和上面不同,它返回的数组老是稠密的.

every()和some();

  • 目的:对数组元素应用指定的函数断定.
  • 参数:两者都须要一个函数.
    > every() 返回true须要知足的条件为:数组中全部元素在函数断定下都为true则返回true,不然返回false. (PS:跟他的的汉语意思同样,每一个)
    > some() 返回true须要知足的条件为:数组中有一个元素在函数断定下为true则返回true, 不然返回false. ((PS:跟他的的汉语意思同样,一些)
    > note: 执行every() 时,如有一个参数为false,则返回,忽略执行后面的参数.
    > note: 而some() 则相反,如有一个参数为true, 则返回, 忽略执行后面的参数.
  • 对于空数组every() 返回true, some()返回 false.

reduce()和reduceRight();(不太经常使用,偏用于数学计算)

  • 目的:使用指定的函数将数组元素进行组合,生成单个值.
  • 参数:reduce() 函数的第一个参数是执行化简操做的函数.第二个是传递给函数的初始值(若是无,函数将把数组中的第一个元素做为其初始值).
    > 空数组上,不带初始值参数调用此函数将会报错.
    > 若是只有一个元素且没有指定初始值,或者有一个空数组而且指定了一个初始值,reduce() 只是简单地返回那个值而不会调用化简函数.
    > reduceRight()reduce() 做用同样, 区别在于它执行的顺序是从右到左.
  • 是否改变原数组: 不改变原数组,返回一个新数组。

indexOf()和lastIndexOf()

  • 目的:搜索数组中具备给定值的元素。
  • 参数:第一个参数指的是须要搜索的值,返回则找到第一个元素的索引或者若是没有找到就返回-1.
    第二个参数是可选的,它指定数组中的一个索引,表示从哪里开始搜索,能够是负数,它表明相对于数组末尾的个数。最后一个元素是-1,倒数第二个元素为-2,以此类推...
  • lastIndexOf() 指从前日后查询. lastIndexOf() 指从后往前查询.

ES6的数组方法


Array.from();

  • 目的:将类数组对象和可遍历对象转化为数组.
  • 参数:上述对象以及第二个参数。第二个参数相似于数组中的map方法,用来对每一个元素进行处理,将处理后的值放入返回的数组.
  • 用法:const toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj) )(); (兼容写法).

Array.of();

  • 目的:将一组值转化为数组.
  • 参数:无或无限(无时返回一个空数组).

copyWithin();

  • 目的:在数组内部,将指定位置的成员复制到其余位置(会覆盖原有成员).
  • 参数:target(必须): 从该位置开始替换数据.
    > start(可选):从该位置开始读取数据.
    > end(可选):到该位置的前一个位置.
  • 是否修改原数组:修改原数组.

find()和findIndex();

  • 目的:在数组内部, 找到第一个符合条件的数组成员.
  • 参数:回调函数接受三个参数,分别表示当前值,当前位置,原数组.
    俩个方法都接受第二个参数用来绑定函数中的this的值.(绑定做用域).
  • PS: 这两个方法均可以发现NaN,弥补了数组的IndexOf() 方法的不足。

fill();

  • 目的:如其意,填充一个数组.
  • 参数:第一个参数表示被填充的元素.
    第二个参数表示填充的起始位置.
    第三个参数表示填充的结束位置(指定位置以前一个).

ES7的数组方法

includes();

  • 目的:表示某个数组是否包含给定的值,与字符串的includes()方法相似.
  • 参数:第一个参数表示要查找的数,第二个参数表示搜索的起始位置,返回一个布尔值.
  • 意义:推荐使用这个而不是indexOf()由于后者会对NaN形成误判.
相关文章
相关标签/搜索