JS数组常用方法

246 阅读4分钟

一、检测数组

一个经典的问题:如何判断一个对象是不是数组,在只有一个网页(即只有一个全局作用域)的情况下,使用instanceof操作符即可:

if(value instanceof Array){
    //操作数组
}

但如果网页里有多个框架,则可能涉及两个不同的全局执行上下文,因此就会有两个不同版本的Array构造函数,如果要把数组从一个框架传给另一个框架,则这个数组的构造函数将有别于在第二个框架内本地创建的数组。

为解决这一问题,就有了Array.isArray()方法,它用于确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的:

if(Array.isArray(value)){
    //操作数组
}

二、数组的增删

splice() 方法很强大,增删改全能,它通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被删除的内容(如果没有删除元素,则返回空数组)。此方法会改变原数组。splice() 方法的3种用法:

  • 删除。需要给**splice()**传2个参数:要删除的第一个元素的位置和要删除的元素数量。
  • 插入。需要给**splice()**传3个参数:开始位置、0(要删除的数量)和要插入的元素。
  • 替换。同样要传3个参数:开始位置、要删除的数量和要插入的任意多个元素。

1. 删

  • **shift()** 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。

  • **pop()**方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。

2. 增

  • **unshift()** 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。此方法更改数组的长度。

  • **push()** 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

三、排序方法

  1. **reverse()** 方法将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组。

  2. **sort()** 方法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的,但这在多数情况下都不是最合适的。为此,sort()方法可以接收一个比较函数,用于判断哪个值应该排在前面。如:arr.sort((a,b)=>a-b))

四、操作方法

  1. **concat()** 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

  2. **slice()** 方法返回一个新的数组对象,这一对象是一个由 begin(开始索引)end(结束索引) 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

五、搜索和位置方法

1. 按严格相等搜索:

  • **indexOf()**方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
  • lastIndexOf() 方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。
  • **includes()** 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false

这些方法都接收两个参数:要查找的元素和一个可选的起始搜索位置。indexOf()includes()方法从数组第一项开始往后搜索,而lastIndexOf()则从最后一项往前搜索。

2. 按断言函数搜索:

  • **find()** 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

  • **findIndex()**方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。

六、迭代方法

有5个迭代方法,每个方法接收两个参数:以每一项为参数运行的函数,以及可选的作为函数运行上下文的作用域对象(影响函数中this的值)。这些方法都不改变原数组。

  1. every():对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true

  2. filter():对数组每一项都运行传入的函数,函数返回true的项会组成数组之后返回。

  3. forEach():对数组每一项都运行传入的函数,没有返回值。

  4. map():对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。

  5. some():对数组每一项都运行传入的函数,如果有一项函数都返回true,则这个方法返回true

七、转换方法

  1. join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。
  2. toString() 返回一个字符串,表示指定的数组及其元素。

参考资料:Array