最近在学习js,之前在上课的时候无论是C++还是java都有学过二维数组,然而宝宝居然不知道二维数组要怎么输出!!!之前是有多渣多混日子啊。。。哎,心碎成了渣渣。。。让我乘热打铁加深下记忆。。。
二维数组必须一行一行输出才能输出二维的你想要的样子,你应该懂得,不然输出的就是所有元素在一行或者直接不显示。举个例子:
var infos =[["小A","女",21,"大一"],
["小B","男",23,"大三"],
["小C","男",24,"大四"],
["小D","女",21,"大一"],
["小E","女",22,"大四"],
["小F","男",21,"大一"],
["小G","女",22,"大二"],
["小H","女",20,"大三"],
["小I","女",20,"大一"],
["小J","男",20,"大三"]];
for(var i=0;i<10;i++){
if(infos[i][1]=="女" && infos[i][3]=="大一"){ //筛选出所有大一女生的信息
for(var j=0;j<infos[i].length;j++){ //遍历一行里的每个元素
document.write(infos[i][j]+" "); //输出一行
}
document.write("<br/>"); //输出一行后换行,接着继续遍历下一行
}
}
说到数组,补充一点数组的方法:
Ps1:concat()这个方法是将几个数组连起来,合并成一个数组,但是原数组是不改变的,相当于新建了一个,所有数组之间都是用,分隔开的。如果想要改变分隔符,可以使用join("a")方法,a为你想要的连接符,空格就是空格连接,join("")就是不加分隔符,直接连起来。
Ps2:reverse() 方法用于颠倒数组中元素的顺序。它与concat()方法不同,它会改变原来的数组,而不会创建新的数组。myarr.reverse()以后,myarr的内容就变了。
Ps3:slice() 方法可从已有的数组中返回选定的元素。语法:
arrayObject.slice(start,end);
返回一个新的数组,包含从 start 到 end (左闭右开)的 arrayObject 中的元素。该方法并不会修改数组,而是返回一个子数组。(这一点与concat()相同)
注意: 1. 可使用负值从数组的尾部选取元素。比如-1是最后一个,-2是倒数第二个元素,以此类推。
2.如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。
3. String.substring() 与 Array.slice() 相似,前者是针对string 类型的对象,后者是针对数组类型的对象 。
Ps4:sort()方法使数组中的元素按照一定的顺序排列。 语法:
arrayObject.sort(方法函数)
参数规定排序顺序,要么不指定,则按unicode码顺序排列;要制定就必须是函数。例如:
1 <script type="text/javascript">
2 var myarr1 = new Array("Hello","John","love","JavaScript");
3 var myarr2 = new Array("80","16","50","6","100","1");
4 document.write(myarr1.sort()+"<br>");
5 document.write(myarr2.sort());
6 </script>
运行结果:
Hello,JavaScript,John,love
1,100,16,50,6,80
上面的代码没有按照数值的大小对数字进行排序。这是因为Array的sort()方法默认把所有元素先转换为String再排序,结果'100'排在了'16'的前面,因为字符'100'比字符'16'的ASCII码小。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该代入两个参数a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
举例代码如下:
1 <script type="text/javascript">
2 function sortNum(a,b) {
3 return a - b; //升序,如降序,把“a - b”改成“b - a”
4 }
5 var myarr = new Array("80","16","50","6","100","1");
6 document.write(myarr + "<br>");
7 document.write(myarr.sort(sortNum));
8 </script>
运行结果:
80,16,50,6,100,1
1,6,16,50,80,100
为什么这么写?而且,下面的sort里面的sortNum也没有参数,怎么运行的?
原因就是function sortNum(a,b)中的a,b并不是你所想的我们一般用的那种参数,而是unicode码里面的a,b ,不然应该写成 function sortNum(var a,var b)。
return a-b 返回的是正数;return b-a 返回的是负数。 sort 函数是根据正负来定义升序和降序的。返回正数则升序,返回负数则降序。
其实就是将一个方法作为参数传入sort(),模式类似于冒泡排序,比较两个数值之间的大小,结果为正位置不变,结果为负交互位置,遍历整个数组,将最终位置返回。