首页 » JavaScript » push、pop、shift、unshift

push、pop、shift、unshift

ECMAScript数组也提供了一种让数组的行为类似与其它数据结构的方法。具体说来,数组可以表现的就像栈一样,后者是一种可以限制插入和删除项的数据结构。栈是一种LIFO(last-in-first-out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(推入)或移除(弹出)只发生在一个位置——栈的顶部。ECMAScript为数组专门提供了push和pop方法,以便实现类似栈的行为。

push方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后的数组长度。而pop方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。请看下面的例子:

var colors = new Array();                 //创建一个数组
var count = colors.push("red", "green");  //推入两项
alert(count);                             //2

count = colors.push("black");             //推入另一项
alert(count);                             //3

var item = colors.pop();                  //取得最后一项
alert(item);                              //black
alert(colors.length);                     //2

栈数据结构的访问规则是LIFO(后进先出),而队列数据结构的访问规则是FIFO(first-in-first-out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。由于push是向数组末端添加项的方法,一次要模拟队列只需一个从数组前端取得项的方法。实现这以一操作的数组方法就是shift,它能够移除数组中的第一项并返回该项,同时将数组长度减1。结合使用shift()和push()方法,可以像使用队列一样使用数组:

var colors = new Array();                 //创建一个数组
var count = colors.push("red", "green");  //推入两项
alert(count);                             //2
count = colors.push("black");             //推入另一项
alert(count);                             //3
var item = colors.shift();                //取得第一项
alert(item);                              //"red"
alert(colors.length);                     //2

unshift和shift的用途相反:它能在数组的前端添加任意各项并返回新数组的长度。因此,同时使用unshift和pop方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项,如下面的例子所示:

var colors = new Array();                    //创建一个数组
var count = colors.unshift("red", "green");  //推入两项
alert(count);                                //2

count = colors.unshift("black");             //推入另一项
alert(count);

var item = colors.pop();                     //取得最后一项
alert(item);                                 //"green"
alert(colors.length);                        //2

IE对JavaScript的实现存在一个偏差,其unshift()方法总是返回undefined而不是数组的新长度。

此文章发表在 JavaScript 标签为 . 将固定链接加入收藏.