在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()方法

不包括第二个参数的位置处的项。如下:

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