JavaScript数组
最后更新于:2022-04-01 11:44:00
**何为数组:**
所谓数组,就是相同数据类型的元素按一定顺序排列的[集合](http://baike.baidu.com/subview/15216/10703233.htm),就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为[下标](http://baike.baidu.com/view/729047.htm)。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-06_572c45a383922.jpg)
在JS中除了Object类型以为,我们用的最多的应该就是数组了。而且JS数组和其他大多数语言中的数组有着很大的区别。在Java语言中,我们声明了一个数组,那么这个数组只能保存相同类型的值,集合数组也是一样;而在我们的JS数组中的每一项都可以保存任何数据,也就是说我们的JS数组第一个位置可以用来保存字符串,第二个位置可以用来保存数值,第三个位置可以用来保存对象。并且JS的数组是动态调整的,有点类似于Java的集合数组(List);会随着数据的增加而扩大数组的容量;
**1、数组的创建**
~~~
var array = new Array(); //创建一个数组
<span style="white-space:pre"> </span>var array = new Array([2]); //创建一个数组并指定长度,注意不是上限,是长度
var array = new Array([1,'字符串',new Object()]); //创建一个数组并赋值,对应的是数字,字符串,对象
alert(array);
~~~
**2.检测数组**
~~~
array instanceof Array; //返回结果为布尔值
Array.isArray(array); //返回结果为布尔值,只支持IE9,谷歌,火狐能
~~~
**3.数组的转换**
~~~
var person1={
toLocaleString :function(){
return "Nikolaos";
},
toString:function(){
return "NiCholas";
}
};
var person2= {
toLocaleString :function(){
return "Grigorios";
},
toString:function(){
return "Greg";
}
};
var people=[person1,person2];
alert(people);
alert(people.toString());
alert(people.toLocaleString());
~~~
数组转换成字符串可以使用toStirng,valueOf,toLocaleString,Join;
**4操作方法**
**4.1数组的元素的访问**
| `1` | `var` `testGetArrValue=arrayObj[1]; ``//获取数组的元素值` |
|-----|-----|
| `2` | |
|-----|-----|
| `3` | `arrayObj[1]= ``"这是新值"``; ``//给数组元素赋予新的值` |
|-----|-----|
**4.2数组元素的添加**
| `1` | `arrayObj. push([item1 [item2 [. . . [itemN ]]]]);``// 将一个或多个新元素添加到数组结尾,并返回数组新长度` |
|-----|-----|
| `2` | |
|-----|-----|
| `3` | `arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);``// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度` |
|-----|-----|
| `4` | |
|-----|-----|
| `5` | `arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);``//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。` |
|-----|-----|
**4.3数组元素的删除**
| `1` | `arrayObj.pop(); ``//移除最后一个元素并返回该元素值` |
|-----|-----|
| `2` | |
|-----|-----|
| `3` | `arrayObj.shift(); ``//移除最前一个元素并返回该元素值,数组中元素自动前移` |
|-----|-----|
| `4` | |
|-----|-----|
| `5` | `arrayObj.splice(deletePos,deleteCount); ``//删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素` |
|-----|-----|
**4.4数组的截取和合并**
| `1` | `arrayObj.slice(start, [end]); ``//以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素` |
|-----|-----|
| `2` | |
|-----|-----|
| `3` | `arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); ``//将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组` |
|-----|-----|
**5.栈方法**
JS数组也提供了一种让数组的行为类似于其他数据结构的方法,数组表现的就像栈一样。栈是一种可以限制插入和删除项,后进先出的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(推入)和移除(弹出)。只发生在栈顶。JS为数组专门提供了push()和pop()方法,以便实现类似栈的行为;
~~~
var names=["张三","李四"];
names.push("王五"); //添加另一项
names[3]="赵六" //添加一项
alert(names.length); //4
var item=names.pop(); //去的最后一项
alert(item);
~~~
**6.队列方法**
栈数据结构的访问规则是后进先出,而队列的数据结构的访问规则是先进先出。队列在列表的末端添加项,从列表的前端移除项。
~~~
var names=["张三","李四"];
names.push("王五"); //添加另一项
names[3]="赵六" //添加一项
alert(names.length); //4
var item=names.shift(); //取得第一项
alert(item);
~~~
**7.重排序方法**
~~~
var values=[4,2,5,7,1];
alert(values.sort()); //sort正序
alert(values.reverse()); //reverse倒序
~~~
**8.位置方法**
位置方法splice()方法,这个方法是最强大的数组方法了,它有很多种用法。splice()的主要用途是向数组的中部插入项,但使用这种方法的方式有三种;
删除:可以删除任意数量的项,只需指定2个参数:要删除的起始位置和要删除的项数,例如
splice(0,2)会删除数组中的前两项
插入:可以向指定位置插入任意数量的项,只需提供3个参数,起始位置0(要删除的项数)和要插入的项,如果要插入多个项,可以再传入第四,第五,以致任意多个项,例如splice(2,0,"张三三","李四四")会从当前数组的位置2开始插入
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置,要删除的项数和要插入的任意数量的项,插入的项数不必与删除的项数相等。例如splice(2,1,"张三三","李四四")会删除当前数组位置2的项,然后再从位置2开始插入字符串;
后面还有更深入的迭代和缩小方法,留着下次讨论;