这是一个用Jquery的简单例子。

假设一个网页有N张表,就像本站的阅读者频道一样,需要获取每张表的最后一个值,这时候要用到两个知识点:

  • 遍历
  • 数组栈

阅读者频道在尾部的进度条x%值获取实现就是基础在这段小脚本上。当然,在实现的过程中没有用到出入栈的概念。

1
2
3
4
5
6
7
8
9
10
11
12
13
//首先等待页面的DOM树加载完
$(document).ready(function () {
var $Uname = $("tbody").length; //取到页面内tbody标签出现了多少次
var Data = [];
for (i = 0; i < $Uname; i++) { //根据tbody标签出现的次数进行遍历次数
$a = $("div tbody").eq(i).find("td:last").text(); //根据jq条件查询到(td:last),每个td最后一行的数据。
Data.push($a); //用push()的方法将数据入站
}
$("#1").attr("style",'width:'+ (((Data[0])/50)*100)+'%'); //修改DOM上的值
$("#2").attr("style",'width:'+ (((Data[1])/50)*100)+'%');
$("#3").attr("style",'width:'+ (((Data[2])/50)*100)+'%');
}
);

这里用到了Javescript常用的数组方法:push()

在数组栈里出了push()还有一个方法是pop(),这两种方法都允许将数组当作来使用,用push()会在数组的尾部添加一个或者多个元素,并返回数组新的长度。pop()则正好相反,它的作用是删除数组的最后一个元素,减小数组的长度并返回它删除的值,在犀牛书里,特意描述了需要注意的部分:

两个方法都修改并替换原始数组而并非生成一个修改版的新数组。组合使用push()pop()能够用Javascript数组实现先后出栈。

关于“栈”

这里我们先补一下关于的知识点:

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈是限定仅在表头进行插入和删除操作的线性表。

就好比:一个死胡同,前面是“此路不通”,只有一个入口,如果一队人进入,只能队尾变对首出去。

出栈入栈的概念上,用图示大概是这样的:

push()pop()模拟一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
var arr = [];
for (var i = 0; i < 5; i++) {
var temp = i + 1;
arr.push(temp);
console.log(temp + " 入栈");
console.log(arr);
}
console.log('栈,先进后出');
var len = arr.length; //这个地方需要注意,因为在出栈的过程arr.length是变化的,每移除一个元素,arr.length就会减一,所以需要将其赋值给一个变量
for (var i = 0; i < len; i++) {
console.log(arr.pop());
}
</script>

结果是:

关于“队列”

这里另外一个知识点是关于队列的

队列在javascript里用的是unshift()pop()方法。

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

就好比:现在这个胡同不是死胡同了,队伍可以直接通过。

模拟一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
var arr = [];
for (var i = 0; i < 5; i++) {
var temp = i + 1;
arr.unshift(temp);
console.log(temp + " 插入");
console.log(arr);
}
console.log('队列,先进先出 First In First Out');
var len = arr.length; //这个地方需要注意,因为在删除的过程arr.length是变化的,每移除一个元素,arr.length就会减一,所以需要将其赋值给一个变量
for (var i = 0; i < len; i++) {
console.log(arr.pop());
}
</script>

结果

unshift()shift()在用法上实际上是一对的,他们非常类似push()pop(),不一样的是前者是在数组头部而非尾部进行元素插入和删除操作。unshift()在数组头部添加一个或多个元素,并将已存在的元素移动到更高索引的位置来获得足够的空间,最后返回数组新的长度。shift()删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置来填补数组头部的空缺。