JavaScript数组方法对比总结

目录

前言

  本文对JavaScript中数组类型(Array)的常用方法进行总结,主要包括其API,使用示例和是否直接操作/修改原数组的分析。文章最后会对ECMAScript5中提供的数组方法进行小结。


join()

作用
  将数组元素衔接为字符串。
参数
  array.join()
  array.join(separator)
  separator: 在返回的拼接字符串中,用以连接原来数组元素的分隔符。如果缺省,默认英文逗号”,”。
返回值
  一个由separator连接的字符串。
说明
  该方法将一个数组的元素连接在一起成为字符串,也有相反的方法-split(),而这个方法是String类型的方法,不在这里的讨论范围之内。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
join()方法并未修改操作的数组本身


reverse()

作用
  颠倒数组中元素顺序。
参数
  array.reverse()
返回值
  元素顺序调整后的数组。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
reverse()方法会直接修改操作的数组本身


sort()

作用
  对数组元素进行排序。
参数
  array.sort()
  array.sort(orderfunc)
  orderfunc: 用来指定如何排序的可选函数。
返回值
  元素排序后的数组。
说明
  1.不带参数时,默认按字母顺序(准确说是字符编码顺序)进行排序;
  2.orderfunc可以自定义排序方式,该函数接受两个参数,返回一个数字,根据数字与0的大小关系确定排序方式:

1
2
3
4
//升序,m-n小于0,n大,表明m排在n前面
function orderfunc(m,n) {
return m - n;
}

1
2
3
4
//降序,n-m小于0,m大,表明m排在n前面
function orderfunc(m,n) {
return n - m;
}

使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
sort()方法会直接修改操作的数组本身


concat()

作用
  连接数组。
参数
  array.concat(value1, value2, ...)
  value1, value2, …: 要连接到数组中的元素。
返回值
  连接新元素后的数组。
说明
  1. 如果新连接的元素中任何一个自身就是数组,那么会将其每个元素依次进行连接(而不是将该数组元素作为一个独立的元素进行连接)。
  2. 但是,如果某个新元素是一个数组,且这个数组中还有某些元素是数组,那么concat()方法并不会递归进行扁平化,也就是说:
var a = [1,2,3];
a.concat(4,[5,[6,7]]); //会返回 [1,2,3,4,5,[6,7]]

使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
concat()方法并未修改操作的数组本身


slice()

作用
  获取数组的一部分。
参数
  array.slice(start, end)
  start: 数组片段的开始序号,如果为负数,则表示从尾部开始计算,即:-1表示最后一个元素,以此类推。
  end: 数组片段的结束序号的后一个序号。如果未指定,则一直到末尾;如果为负数,则表示从尾部开始计算。
返回值
  数组片段-子数组。
说明
  如果想要移除数组的一部分,应使用splice()方法。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
slice()方法并未修改操作的数组本身


splice()

作用
  插入,删除或者替换数组元素。
参数
  array.splice(start, deleteCount, value, ...)
  start: 开始插入/删除数组元素的位置序号。
  deleteCount: 要删除的个数,从start开始(并且包含start)。如果为0,则表明不删除,直接插入。
  value, …: 将要插入的零个或多个值。
返回值
  如果删除个数不为零,则返回被删除元素组成的数组;否则,返回空数组[]。
使用示例
  在chrome的控制台中做如下操作:


是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
splice()方法会直接修改操作的数组本身


push()

作用
  给数组追加元素。
参数
  array.push(value, ...)
  value, …: 将要插入的零个或多个值。
返回值
  新数组的长度。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
push()方法会直接修改操作的数组本身


pop()

作用
  移除数组的最后一个元素。
参数
  array.pop()
返回值
  被移除的最后一个元素。
说明
  如果数组已经为空,pop()不会修改数组,直接返回undefined。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
pop()方法会直接修改操作的数组本身


unshift()

作用
  在数组头部插入元素。
参数
  array.unshift(value, ...)
  value, …:将要插入的零个或多个值。
返回值
  新数组的长度。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
unshift()方法会直接修改操作的数组本身


shift()

作用
  移除数组的第一个元素。
参数
  array.shift()
返回值
  数组原来的第一个元素。
说明
  如果数组已经为空,shift()不会修改数组,直接返回undefined。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
shift()方法会直接修改操作的数组本身


toString()

作用
  将原数组转换为字符串。
参数
  array.toString()
返回值
  数组的字符串表示。
说明
  如果调用该方法的对象不是Array,将会抛出TypeError异常。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
toString()方法并未修改操作的数组本身


toLocaleString()

作用
  将原数组转换为本地字符串。
参数
  array.toLocaleString()
返回值
  数组的字符串表示。
说明
  1.如果调用该方法的对象不是Array,将会抛出TypeError异常。
  2.toLocaleString()和toString()的区别在于,toLocaleString()会根据你机器的本地环境来返回字符串,它和toString()返回的值在不同的本地环境下使用的符号会有微妙的变化。这一点在时间转换上的区别比较明显:
在本机中文环境下:

而在英文环境下则可能会有不同的时间显示格式。
使用示例
  在chrome的控制台中做如下操作:

是否直接操作/修改原数组
  在上图示例基础上,打印原数组值:

由此可得:
toLocaleString()方法并未修改操作的数组本身


ECMAScript5中新增数组方法

说明:以下方法侧重于在数组上进行更为复杂的操作,因此是否修改原数组不能一概而论,很大程度依赖于其中自定义函数的内容。

forEach()

作用
  为每一个数组元素调用一个函数。
参数
  array.forEach(f, o)
  f:为每个元素调用的函数
  o:调用f时的this值(作用域,上下文环境)
返回值
  无


map()

作用
  根据给定的规则将原数组中每个元素重新计算。
参数
  array.map(f, o)
  f:为每个元素调用的函数
  o:调用f时的this值(作用域,上下文环境)
返回值
  新数组,由f计算生成。


filter()

作用
  筛选通过断言的数组元素。
参数
  array.filter(predicate, o)
  predicate:为每个元素调用的函数
  o:调用predicate时的this值(作用域,上下文环境)
返回值
  新数组,由predicate计算生成。


every()

作用
  测试断言函数是否对每个元素均为真。
参数
  array.every(predicate, o)
  predicate:为每个元素调用的函数
  o:调用predicate时的this值(作用域,上下文环境)
返回值
  true:每个元素经过断言函数测试均为真。
  false:有任意一个或更多元素元素经过断言函数测试为假。


some()

作用
  测试是否有元素满足断言函数。
参数
  array.some(predicate, o)
  predicate:为每个元素调用的函数
  o:调用predicate时的this值(作用域,上下文环境)
返回值
  true:至少有一个元素经过断言函数测试均为真。
  false:全部元素经过断言函数测试为假。


reduce()

作用
  从数组元素中计算出一个值。
参数
  array.reduce(f, inital)
  f:合并两个值的函数
  o:可选初始值。
返回值
  数组化简后的一个值。


reduceRight()

作用
  从数组元素中计算出一个值(从右到左)。
参数
  array.reduceRight(f, inital)
  f:合并两个值的函数
  o:可选初始值。
返回值
  数组化简后的一个值。


indexOf()

作用
  查找数组。
参数
  array.indexOf(value, start)
  value:将要查找的值
  start:开始查找的数组序号。如果省略,则为零,从最开始查找。
返回值
  大于等于start的最小序号值。如果不存在,返回-1。


lastIndexOf()

作用
  反向查找数组。
参数
  array.lastIndexOf(value, start)
  value:将要查找的值
  start:开始查找的数组序号。如果省略,从最后一个元素开始查找。
返回值
  小于等于start的最小序号值。如果不存在,返回-1。