JavaScript引用类型——Array类型(二)

栈方法

JavaScript中的数组可以表现的像栈一样。栈数一种LIFO(Last In First Out,后进先出)的数据结构,也就是说,最新添加的项,最先移除,而栈中的插入和移除只能发生在一个位置——栈的顶部。JavaScript提供了push()和pop()方法实现这个类似于栈的行为。
**push()方法可以接收任意数量的参数,把它们逐个的添加到数组的末尾,并返回修改后的数组长度。而pop()方法则从数组末尾移除一项,减少数组的的length值,然后返回移除的项。**例如:

var colors = new Array();
var count = colors.push("purple","green");
console.log(count);			//2

count = colors.push("pink");//返回插入的一项
console.log(count);			//3

var item = colors.pop();	//返回移除的最后一项
console.log(item);			//"pink"
console.log(colors.length);	//2

队列方法

栈数据结构的范文规则是LIFO(后进先出),而队列数据结构的方法是FIFO(First In First Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。由于push()是向数组末项添加项的方法,因此要模拟队列只需要从数组前端移除一项即可。实现这一操作的数组方法是shift(),他能够移除数组中的第一项并返回移除项,同时数组的长度减1。 例如:

var colors = new Array();
var count = colors.push("purple","green");
console.log(count);				//2

count = colors.push("black");
console.log(count);				//3

var item = colors.shift();
console.log(item);				//"purple"
console.log(colors.length);		//2

JavaScript中还未数组提供了一个unshift()方法。顾名思义,unshift()与shift()的用途相反:它能够在数组前端添加任意个项并返回新数组的长度。因此,同时使用unshift()和pop()方法,可以从相反的方向模拟队列,即在数组的前端添加项,从数组的末端移除项。如下所示:

var colors = new Array();
var count = colors.unshift("purple","green");
console.log(count);			//2

count = colors.unshift("pink");
console.log(count);			//3

var item = colors.pop();
console.log(item);			//green
console.log(colors.length);	//2

这个例子中首先创建了一个数组并使用unshift()方法先后插入三个值。首先数"purple"和"green",然后是"pink",数组中的各项 的顺序是"pink"、“purple”、“green”。在调用pop()方法时,移除并返回最后一项,即"green"。

重排序方法

数组中存在两个可以直接用来排序的方法:reverse()和sort()。reverse()方法会将数组项的顺序翻转。第一项变成最后一项,最后一项变成第一项。举个例子:

var num = [0,1,2,3,4,5,6,7,8,9];
num.reverse();
console.log(num);	//(10) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

在默认情况下,sort()方法按升序排列数组——最小的值在最前面,最大的值在最后面。为了实现排序,sort()方法会调用每个数组项中的toString()方法,然后得到比较字符串,已确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。例如:

var num = [0,1,4,8,9,10,15];
num.sort();
console.log(num);	//(7) [0, 1, 10, 15, 4, 8, 9]

在例子中值排序是没有问题的,但是,sort()方法还是会根据调用toString()方法得到的字符串结果去改变原来的顺序。
怎么办呢?
sort()方法可以接收一个比较函数作为参数,以便我们确定哪个值位于哪个值其前面。
比较函数接收两个参数,如果第一个参数应该位于第二个参数前面则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。以下是一个简单的比较参数:

function compare(value1,value2) {
	if (value1 < value2) {
		return -1;
	}else if (value1 > value2) {
		return 1;
	}else{
		return 0;
	}
}

这个比较参数适用于大多数数据类型,只要将其作为参数传递给sort()方法即可。举个例子:

function compare(value1,value2) {
	if (value1 < value2) {
		return -1;
	}else if (value1 > value2) {
		return 1;
	}else{
		return 0;
	}
}
var num = [4,1,15,9,10,8,0];
num.sort(compare);
console.log(num);		//(7) [0, 1, 4, 8, 9, 10, 15]

在将比较函数传递给sort()方法后,数值正确排序。当然,也可以通过比较函数产生降序排序结果,只需要交换比较函数的返回值即可。

function compare(value1,value2) {
	if (value1 < value2) {
		return 1;
	}else if (value1 > value2) {
		return -1;
	}else{
		return 0;
	}
}
var num = [4,1,15,9,10,8,0];
num.sort(compare);
console.log(num);		//(7) [15, 10, 9, 8, 4, 1, 0]

交换函数返回值的意思是让更大的值位置更靠前,也就是对数组按照降序排序。当然,如果只是想反转数组原来的顺序,使用reverse()方法会更方便一些。
注意:reverse()和sort()方法的返回值是经过排序后的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值