企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
**何为数组:** 所谓数组,就是相同数据类型的元素按一定顺序排列的[集合](http://baike.baidu.com/subview/15216/10703233.htm),就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为[下标](http://baike.baidu.com/view/729047.htm)。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。 ![](https://box.kancloud.cn/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开始插入字符串; 后面还有更深入的迭代和缩小方法,留着下次讨论;