Array类型是JS中很常见的一个类型,了解Array的用法也能有助于写出更高效的代码,下面是整理出的关于Array类型的所有知识点。
一 创建数组的几种形式
创建数组有两种形式:第一种是使用构造函数,如下:
var arr = new Array();
var arr = new Array(20); //可以声明数组长度
var arr = new Array("red","blue","green"); //可以在声明数组时传递已知项
第二种是使用数组字面量的形式:
var arr = [];
var arr = ["red","blue","green"];
在使用数组字面量创建数组的时候,数组项之间用逗号分隔,但是当最后一项后面也跟一个逗号时
var arr = ["red","blue","green",];
上面的声明方式在IE8下数组的长度为4,每一项的值为red,blue,green,undefined;
在IE9及以上则会忽略最后一个逗号,数组长度为3.
访问的时候可以使用方括号下标的语法来访问特定下标的数组项。
arr[0]; //red
arr[2]; //green
二 检测数组
检测是否为数组,ECMAScript5新增了如下方法
var arr = ["red","blue","green"];
if(Array.isArray(arr)){
//是数组
}
三 转换方法
数组也是对象的一种,所有对象都具有toString()、toLocalString()、valueOf()方法,调用数组的toString()会返回数组每项的字符串以逗号拼接的形式返回的字符串,valueOf()返回的还是数组。
join()方法可以传递一个参数,将数组用传入的字符串分隔开来,默认是逗号。
四 数组中的栈方法
我们可以把数组想象成一个栈,它拥有栈方法push和pop
push:在数组尾部添加一项,返回新数组的长度
pop:弹出数组尾部最后一项,返回最后一位数组项
五 数组中的队列方法
我们也可以把数组想象成一个队列,他拥有队列方法shift和unshift
shift:在数组头部删除第一项,返回删除项
unshift:在数组头部添加一项,返回新数组长度
六 数组中的排序方法
数组中存在两个方法可以对原数组进行重新排序
sort:按照升序排序
reverse:翻转数组
在这里要注意的是sort方法比较的是字符串,即使数组的每一项是数组,也会先调用每一项的toString方法后才进行比较,所以对于下面的例子,结果并不是我们想要的:
遇到这种情况,我们就需要给排序方法传递一个比较函数。
function compare(value1,value2){
return value1 - value2;
}
var arr = [1,2,3,10,4,5]
arr.sort(compare);
七 操作方法
数组中有一个slice方法,接收2个参数,起始位置下标和结束位置下标,会返回包含起始位置,到结束位置前一位置的所有项。
数组中还有个splice方法,用法很强大,可以对数组进行插入,删除,替换操作。
删除:传递两个参数,要删除的起始位置和要删除的项数。
插入:传递三个参数,起始位置,0,要插入的项,如果要插入多个,可以传第四第五个参数。
替换:传递三个参数,起始位置,要删除的项数,要替换的项,如果有多个,则传递多个参数。
八 位置方法
数组有两个查找位置的方法indexOf和lastIndexOf
indexOf:传递两个参数,要查找的项和查找起点位置的索引(可选)
lastIndexOf:和上面的参数一样,只不过从数组尾部开始查找
九 迭代方法
数组中提供了很多的迭代方法,明白这些方法也是高效操作数组的核心。
every:对数组中每一项运行给定函数,如果每一项都返回为true,则返回true
filter:对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组。可以去看一下这个实例【面试】手写一个函数过滤一维数组中的所有假值
forEach:对数组中的每一项运行给定函数,没有返回值
map:对数组中的每一项运行给定函数,返回每次调用的结果组成的数组
some:对数组总的每一项运行给定函数,如果函数任一项返回true,就返回true
除了上面的迭代方法,Array对象还新增了两个归并数组的方法,reduce和reduceRight。归并方法会迭代数组中的所有项,然后构建一个最终返回的值。reduce从数组第一项开始,逐个遍历到最后,而reduceRight则从数组的最后一项开始,向前遍历。
reduce:接收4个参数,前一个值,当前值,项的索引,数组对象。
我们来看一个例子,求一个数组所有项的和。
还有一个更高阶的例子你可以点击这里查看【面试】手写一个函数实现求多个一维数组的交集
以上,就是JS中Array对象的所有方法,了解数组的操作有助于编写高效的代码,如果有任何问题,欢迎进行高质量交流。