考完试本来成绩就差,还得排名次,还得按单科排。。。不知道这样很伤自尊么,从小到大提起来这个就有心理阴影。。
吐槽完了,我们来看这个小作业吧。。。囧。。。
先上图,,类似这样的一个表格,我们需要做到的是,单击某一科的表头,按照该科所有同学成绩降序排列,并根据成绩给出同学的排名。
看起来应该不难(谁说的?~~),按道理将应该用<table>标签来绘制这个表格,好吧,我是野路子。竟然用了4个<dl>来做这个作业。我是坑货我承认,那么我们先来实现这个效果。
说一下实现方法的一些关键点吧。
第一时间想到的是用sort();方法将已经存入Array[]的英语成绩进行排序,那么很简单。这个方法会轻松地升序排列出成绩,然后用reverse()方法改为降序就OK了。那么问题来了(二货们自行脑补~~~):怎么样才能让姓名也跟着这个数组进行排序呢?利用sort();方法想了半天也没相通(才疏学浅)。那么我就想到了自己写排序的方法。
例:Array1 = 英语成绩;
Array2 = 姓名;
for(i=0;i<Array1.length;i++){
for(j=i+1;j<Array1.length+1;j++){
var tmp;
if(Array1[i]<Array1[j]){
tmp = Array1[i];
Array1[i] = Array1[j];
Array1[j] = tmp;
tmp = Array2[i];
Array2[i] = Array2[j];
Array2[j] = tmp;
}
}
}
通过这个排序函数对Array1(英语成绩)进行排序的同时,每一步排序动作会同时对Array2(姓名)进行相同的操作。如此以来,问题解决。
附上源代码。
1 2 3 4 5Document 6 26 27 282986 87 17930
43- 姓名 31
- 大毛
32- 二毛
33- 三毛
34- 小明
35- 小红
36- 小兰
37- 张三
38- 李四
39- 王五
40- 赵六
41 4244
57- 英语 45
- 37
46- 73
47- 56
48- 62
49- 81
50- 53
51- 69
52- 88.5
53- 63
54- 74
55 5658
71- 数学 59
- 53
60- 81
61- 73.5
62- 66.5
63- 90
64- 54
65- 68
66- 43
67- 65.5
68- 83
69 7072
85- 语文 73
- 71
74- 49
75- 53.5
76- 60.5
77- 81
78- 80
79- 67
80- 69
81- 57
82- 89
83 84