javaScript中Array类型的方法(一)

1.栈(后进先出)方法:push()和pop()
push()方法可以接收任意的参数,把他们逐个添加到数组的末尾,并返回修改后数组的长度;
pop()方法则是从数组末尾移除最后一项,减少数组的length值,然后返回移除值;
push()和pop()方法都是数组默认的方法;

1
2
3
4
5
6
7
8
9
10
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

2.队列(先进先出)方法:shift()和unshift()
shift()方法可以将数组中的第一项进行移除,并且返回该项,数组长度减1;
unshift()方法可以在数组的前端添加任意个项并返回新数组的长度;

1
2
3
4
5
6
7
8
9
10
var colors = new Array();	//创建了一个数组
var count = colors.push("red","green"); //推入两项
alert(count); //2

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

var items = colors.shift(); //取得第一项(数组的首项)
alert(item); //"red"
alert(colors.length); //2

同时使用unshift()与pop()方法可以从相反的方向来模拟队列,即在数组的前端添加项,在数组的末尾移除项

1
2
3
4
5
6
7
8
9
10
var colors = new Array(); 		//创建一个数组
var count = colors.unshift("red", "green"); //在数组的前端推入两项
alert(count); //2

count = colors.unshift("black"); //在数组前端推入另一项
alert(count); //3

var item = colors.pop(); //取得最后一项,并同时移除了最后一项
alert(item); //"green"
alert(colors.length); //2

小结:
shift与unshift的作用正好相反
栈方法总是对数组的最后端进行操作,push()从结尾进行添加,pop将结尾项进行移除
队列方法总是对数组的开始位置进行操作,shift()将起始位进行移除,unshift()从起始位进行添加

3.重排序的方法:reverse()和sort()
数组中存在两个可以直接用来排序的方法:reverse()和sort();
reverse()方法是将数组的顺序进行反转,案例如下

1
2
3
var values = [1, 2, 3, 4, 5]; 
values.reverse();
alert(values); //5,4,3,2,1

sort()方法是将数组里面的元素转化为string类型再进行排序,即使是number类型也会先转化为string类型,请看下面案例

1
2
3
var values = [0, 1, 5, 10, 15]; 
values.sort();
alert(values); //0,1,10,15,5

原来的数组,本身就是按升序进行排列,排序后改变了原来正确的排列顺序。原因在于:使用sort()函数的时候是通过将数组的每一项转化为string类型来进行比较的,因为数值 5 虽然小于 10,但在进行字符串比较时,”10”则位于”5”的前面,于是数组的顺序就被修改了。

正确的使用方式是我们可以定义一个简单的比较函数如:

1
2
3
4
5
6
7
8
9
function compare(value1, value2) { 
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}

这个比较函数可以适用于大多数数据类型,只要将其作为参数传递给 sort()方法即可,如下面这
个例子所示。

1
2
3
var values = [0, 1, 5, 10, 15]; 
values.sort(compare);
alert(values); //0,1,5,10,15