2.8.3 向数组添加项目

假设我们创建了一个数组来记录用户在Web页面上单击的项目。每次用户单击页面,就向数组添加一个项目。JavaScript提供了向数组添加内容的几种方式。

在数组的末尾添加一个项目

要在数组的末尾添加一个项目,可以使用2.8.2节介绍的索引表示法,使用比列表中的最后一项大1的一个索引值。例如,假设已经创建了一个名为properties的数组:


var properties=['red',’14px','Arial'];


此时,数组有3个项目。别忘了,可以使用比项目总数小1的一个索引来访问数组最后一项,因此,在这个例子中,数组中的最后一项是properties[2]。要添加另外一项,可以这么做:


properties[3]='bold';


这行代码在数组的第4个位置插入了'bold',这就创建了拥有4个元素的一个数组,即['red',’14px','Arial','bold']。注意,当添加一个新项目的时候,我们使用了等于数组中当前元素的总数的一个索引值,因此,可以通过使用数组的length属性作为索引从而确保总是在数组的末尾添加一项。例如,可以把上面的这行代码重写成如下:


properties[properties.length]='bold';


也可以使用数组的push()命令,它将我们所提供的圆括号之间的内容添加到数组的末尾。和使用length属性一样,通过在数组名的后面添加一个点号再跟着push()来使用该命令。例如,下面是在properties数组末尾添加一项的另一种方法:


properties.push('bold');


在圆括号中提供的任何内容(在这个例子中是字符串'bold'),都将作为一个新项目添加到数组的末尾。我们可以使用任何一种类型的值,如字符串、数值、Boolean或者甚至一个变量。

push()命令的一个优点是:允许向数组中添加多个项目。例如,假设想要在名为properties的数组末尾添加3个值,可以像下面这样做:


properties.push('bold','italic','underlined');


在数组的开头添加一项

如果想要在数组的开头添加一项,可以使用unshift()命令。下面是在properties数组的开头添加'bold'值的一个例子:


var properties=['red',’14px','Arial'];

properties.unshift('bold');

这段代码运行之后,数组properties包含4个元素:['bold','red',’14px','Arial']。和push()一样,我们可以使用unshift()在数组的开始处插入多个项目:

properties.unshift('bold','italic','underlined');


注意:确保使用的时候,在数组名的后面跟着一个点号和想要使用的方法。换句话说,push('new item')是无效的。必须先使用数组名(就是在创建数组时给数组的名字),然后跟着一个点号,然后是方法,例如:authors.push('Stephen King');。

选择如何向数组添加项目

到目前为止,本章介绍了向数组添加项目的3种方法。表2-5比较了这些技术。这些命令中的每一个都完成相似的任务,因此可以根据程序的情况来选择其中一种。如果存储在数组中的项目的顺序无关紧要,那么,这些方法中的任何一种都可以使用。例如,假设有一个产品图片的页面,并且单击一个图片就会把产品添加到购物车中。可以使用一个数组存储购物车商品。商品出现在购物车(或数组)中的顺序无关紧要,因此可以使用上述技术中的任何一种。

然而,如果创建一个数组来记录某些事情发生的顺序,那么就与选择的方法有关系了。例如,假设要创建一个页面,它允许访问者通过单击页面上的歌名来创建一个歌曲播放列表。既然播放列表中的歌曲按照它们应该播放的顺序来排列,那么,顺序是很重要的。因此,访问者每次单击一首歌,这首歌曲的名字都应该出现在播放列表的末尾(因此,它将会是最后一首要播放的歌曲),那么可以使用push()方法。

2.8.3 向数组添加项目 - 图1

push()和unshift()命令返回一个值。具体来说,一旦push()和unshift()完成了任务,它们就可以提供数组中项目的数目。例如:


var p=[0,1,2,3];

var totalItems=p.push(4,5);


这段代码运行之后,totalItems中存储的值是6,因为现在p数组中有6个项目。

高级用户提示创建队列

向数组添加项目的方法(push()和unshift())以及从数组删除项目的方法(pop()和shift())通常一起使用,以提供按照项目创建的顺序来访问它们的方法。典型的例子就是音乐播放列表。歌曲按照它们在列表中出现的顺序播放,因此,先播放第一首歌并且随后从队列中删除它。这一安排类似于排队等候看电影。当你到达电影院,就在队列的末尾排队,当电影快要开始的时候,大门打开,队列中的第一个人首先进去。在编程领域,这一概念叫做FIFO(First In, First Out,先进先出)。可以使用数组以及push()和shift()方法来模拟这种安排。例如,假设有一个名为playlist的数组。要在队列的末尾添加一首新的歌曲,使用push()的方法如下:


playlist.push('Yellow Submarine');


要获取下一首将要播放的歌曲,可以获取列表中的第一项,如下所示:


nowPlaying=playlist.shift();


这段代码从数组中删除了第一个项目,并且将它存储在名为nowPlaying的变量中。FIFO概念对于创建和管理诸如播放列表、任务列表或者图像幻灯片这样的队列很有用。