在ECMAScript语言中为Array对象提供了很丰富的方法,在使用这些方法的时候,将某些方法进行组合可以实现不同的数据结构,如栈、队列等数据结构,Array对象常用的有以下几个方法,先简单的描述以下:
1. toString()方法
返回特殊的字符串,该字符串是是通过对数组的每个元素条用toString()方法,然后是用逗号把他们连接在一起构成。如:数组arr = ["123","456","789"],调用toString()方法返回的字符串是"123,456,789"。
2. valueOf()方法
其原理和toString()方法类似,也是调用数组每个元素的valueOf()方法,使用逗号组合和返回,结果和toString()一样。
3. concat()方法
该方法和String对象的concat方法的处理方式几乎完全一样,其参数将被附加在数组末尾,返回值为一个新的Array对象,而条用该方法的数组不发生改变,例如:
1 var arr = ["ab","cd","ef"];
2 var arr_1 = arr.concat("gh");
3 alert(arr_1.toString()); // 输出结果:ab,cd,ef,gh
4 alert(arr.toString()); // 输出结果:ab,cd,ef
4. slice()方法
slice()方法也与String对象的slice()方法非常相似,返回具有指定项的新数组,该方法接受1个或者2个参数,即要提取的项的起始位置和结束位置。如果只有一个参数该方法将返回从该位置开始到数组结尾所的所有项的新数组;如果有两个参数,该方法将返回第一个位置和第二个位置间的所有项,不包括第二个参数的位置处的项。如下:
var arr = ["ab","cd","ef","gh","ij","kl","mn"];
var arr_1 = arr.slice(2);
var arr_2 = arr.slice(2,5);
alert(arr_1.toString()); // 输出结果:ef,gh,ij,kl,mn
alert(arr_2.toString()); // 输出结果:ef,gh,ij
5. push()方法
push()方法用于在Array结尾添加一个或多个元素。
6. pop()方法
pop()方法正好和push()方法相反,用于删除Array最后一个数组元素,操作结构作为返回值返回,起本身不发生改变。
7. shift()方法
shift()方法将删除数组的第一个元素,然后将结果作为返回值返回,而调用该方法的数组对象不发生变化。
8. unshift()方法
与shift()方法相对应,起作用正好相反,是将一个新元素,直接插入到数组的起始位置后,将结果作为返回值返回,起自身并不改变。
9. sort()方法
sort()方法根据数组元素的值按照升序的方式为他们排序。要进行这种排序首先调用toString()方法,将所有值转换成字符串,然后根据字符串代码比较数组项。例如:
var colors = ["red","green","blue","yellow"];
colors.sort();
alert(colors.toString()); //输出结构:blue,green,red,yellow
上面这段代码是对以字符串为元素的数组进行的排序,由于所有值都是字符串,所以输出以上结构是合乎逻辑的。不过,如果值是数字结构就显得比较奇怪了:
var nums = [3,32,2,5];
nums.sort();
alert(nums.toString());//输出结果:2,3,32,5
由以上结果可以看出,其结果并非按照其值从小到大排列的,出现这种情况是因为数字被转化成了字符串之后再进行比较的。
10. splice()方法
该方法比较简单,只是把元素插入的数组中部。不过,该方法的用于插入这些元素的方式的变体却又很大的用途:
· 删除——只需要声明两个参数,就可以从数组中删除任意多个元素,这两个参数是要删除的第一个元素的位置和要删除的个数,例如arr.splice(0,2)将删除数组arr中的前两个元素。
· 替换而不删除——声明三个参数就可以把数据元素插入到指定的位置,这三个参数分别是起始位置、0(要删除的数组的个数)和要插入的元素。此外,还可以用第四个、第五个或者更多个参数指定其他要删除的项。例如:arr.splice(2,0,"red","green")将在位置2处插入"red"和"greeen"。
· 替换而不删除——声明三个参数就可以吧数据元素插入到指定的位置,这三个参数是起始位置、要删除的数组元素的个数已经要插入的元素。此外,还可以指定要插入的更多的元素。要插入的元素的个数不必等于删除的元素的个数。例如:arr.splice(2,1,"red","green")将删除数组arr中位置2处的元素,然后再位置2处插入"red"和"green"。
通过介绍以上几个方法可以知道,调用数组的push()和pop()方法能构造出栈这种数据结构,而是用push()和shift()方法可以构造出队列这种数据结构。栈这种结构的特点是后进后出的结构,意思是最后添加的元素是最新删除的元素,栈中的删除和插入操作只发生在一个位置,即栈的顶部。队列这种数据结构其特点即是先进先出、后进后出,就如生活中常见的在超市购物后排队结账是一样的效果。以下例子是用Array对象模拟了这两种数据结构。如下:
构造栈的结构:
var stack = new Array();
stack.push("aa"); // 插入元素
stack.push("bb");
stack.push("cc");
stack.push("dd");
alert(stack.toString()); // 输出结果:aa,bb,cc,dd
stack = stack.pop(); // 弹出栈定的元素
alert(stack.toString()); // 输出结果:aa,bb,cc
队列的结构:
var queue = ["aa","bb","cc"];
queue.push("dd"); // 向队列中插入元素
queue.push("ee");
alert(queue.toString()); // 输出结构:aa,bb,cc,dd,ee
queue = queue.shift(); // 弹出元素
alert(queue.toString()); // 输出结构:bb,cc,dd,ee