响应式网页设计之二维数组

JavaScript对象编程(三)


补充:文章中所有的代码都是写在html文件中,JS代码需要用< script >< /script >标签包起来。

一、二维数组

1.创建与访问

  1. 创建二维数组
    在上一章分享的数组中再加一层数组即可;
    比如一个水果摊,需要一个 二维数组 存放 水果的价格 和 水果
    下面代码中展示的 fruits 就是一个水果摊:
var fruits = [["1", "Banana"], ["2", "Orange"]];
var element = ["3", "Apple"];
fruits[2] = element;
  1. 访问二维数组
    二维数组的访问可以通过索引值,这里区别与一维数组的是需要写两个索引值,才能访问到最里层的元素。
fruits[0] // ["1", "Banana"]
fruits[0][1] // "Banana"
  1. 遍历二维数组
    一个循环得到水果摊所有的水果
for(var i in fruits){
	for(var j in fruits){
		console.log(fruits[i][j]) //控制台输出所有的水果价格和水果
	}
}
  1. 二维数组添加元素
    这里也是使用push()方法来添加元素
    水果摊新进购了一批苹果,然后把苹果加入水果摊中
var arr = [["1","Banana" ],[ "2","Orange" ]]
var element = [ "3","Apple" ] //把苹果打包在 element 中
arr.push(element)

2.小练习

读取用户输入,使用二维数组进行储存并输出
响应式网页设计之二维数组
参考js代码如下所示:

var arr = []  //定义一个数组(因为是弱类型语言,所以只要是数组就行,没有[][]这种方式)
function add() {
	var element = []
	var name = document.getElementById( ' name ' ).value
	var age = document.getElementById( ' age ' ).value
	var gender = document.getElementById( ' gender' ).value
	element.push( name,age,gender)
	arr.push(element)
	var str = ''
	for ( var i in arr) {
		for ( var j in arr[i]) {
			str += arr[i][j] + '&nbsp; '
		}
		str += '<br/>'
	}
	document.getElementById( 'list" ).innerHTML = str
}

二、数组的方法

1.位移元素

  1. shift()
    删除首个数组元素并返回被删除的元素,同时把所有其他元素“位移”到更低的索引。
var fruits = ["Banana", "Orange", "Apple", "Mango"];  
var x = fruits.shift();//fruits的值是[“Orange”, “Apple” , “Mango”]; x的值是"Banana"
  1. unshift()
    向数组的开头添加一个或更多元素并返回新的长度,同时把所有其他元素“位移”到更高的索引。
var fruits = ["Orange", "Apple", "Mango"];  
var x = fruits.unshift("Banana");//fruits的值是[“Banana”, “Orange”, “Apple” , “Mango”]; x的值是4

2.数组排序

  1. reverse()
    颠倒数组中元素的顺序,并返回数组
var fruits = ["Banana", "Orange", "Apple", "Mango"];  
var x = fruits.reverse();//x和fruits的值均为[“Mango”, “Apple”, “Orange”, “Banana”]

  1. sort()
    数组的元素进行排序,并返回数组
var fruits = ["Banana", "Orange", "Apple", "Mango"];  
var x = fruits.sort();//x和fruits的值均为[“Apple”, “Banana”, “Mango” , “Orange”]

注意:
sort()对字符串排序,从左至右逐字比较(ASCII码顺序)
① [“a”, “A”, “1”], 按ASCII码顺序排列后为[“1”, “A”, “a”]。(数字>大写字母>小写字母)
② [“ab”, “ac”, “abc”], 排序后为[“ab”, “abc”, “ac”]。
(第一位相同比较第二位,b>c,因此ab和abc在ac之前;再比较ab与abc, ab没有第三位,因此排在abc之前)
③ 对字符串形式的数字,排序规则不变,如[“10”, “5”, “18” , “50”], 排序后为[“10”, “18”, “5”, “50”]

补充:
如需要对字符串形式的数字进行排序,采用以下两种方式
① 统一格式,补足位数,如[“10”, “5”, “18” , “50”]中, 将“5”写为“05”
② 转换为数字,使用特殊方法对数字排序

3.数字排序

可以将数字进行升序或者降序排列

  1. 数字升序
function 函数名(a, b) {  
    return a - b //升序
}  
var arr = [10,5,8,50];
arr.sort(sortby)  //[5,8,10,50]
  1. 数字降序
function 函数名(a, b) {  
    return b - a //降序
}  
var arr = [10,5,8,50];
arr.sort(sortby)  //[50,10,8,5]

可以直接写在sort()内写匿名函数作为参数

arr.sort(function (a, b) {  
    return a - b 
})  

4.多维数组排序

举一个小栗子来试一试
var arr = [[“Alice”, “95”], [“Bob”, “80”], [“Cart”, “100”]];
需要对多维数组中的值进行排序时,可借助上述的函数
根据比较函数的返回值为正或为负决定排列顺序

function sortby(a,b) {
	return a[1] - b[1]
}
arr. sort( sortby )

三、网页小案例

1.题目要求

修改任务6-2待办事项,添加“优先级”下拉框,可选择1、2、3,增加背景色下拉框,可选择多种颜色。
将任务名与优先级存入二维数组
按优先级降序排序
输出二维数组
响应式网页设计之二维数组

2.原码奉上

建议先尝试着写一下,自己完成更有成就感喔!
响应式网页设计之二维数组

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
        
			#box {
				font-size: 50px;
				margin: 0;
			}
			input[type=text] {
				width: 150px;
			}
            td{
                width: 80px;
                text-align: center;
                border: 1px solid gray;
            }
		</style>
	</head>
	<body>
		<p>请输入待办事项</p>
		<input type="text" name="item" id="item" value="" />
        优先级:<select name="rank" id="rank">
            <option value="3">3</option>
            <option value="2">2</option>
            <option value="1">1</option>
        </select>
        背景色:<select name="color" id="color">
            <option value="hotpink">粉色</option>
            <option value="rgb(168, 56, 233)">紫色</option>
            <option value="rgb(83, 235, 78)">绿色</option>
            <option value="rgb(108, 217, 236)">蓝色</option>
        </select>
		<input type="button" name="add" id="add" value="添加" onclick="add()" />
        <h1>项目优先级</h1>
		<table border="1" id="tableBox">
            
        </table>
		<script>
			var toDoList = [];  //定义任务数组
			
			// add()用于新增任务
			function add(){
				var item = document.getElementById("item").value;
                var rank = document.getElementById("rank").value;
                var color = document.getElementById("color").value;
                var newItem = [item,rank,color];  // 把新任务的元素存进数组
				toDoList.push(newItem);  //将新任务添加到总任务中
                toDoList.sort(function(a,b){ //多维数组排序,根据优先级
                    return b[1]-a[1];
                })
				show(toDoList);
			}
			
			// show()用于循环显示内容
            function show(toDoList){
                var txt ="<tr><td>任务</td><td>优先级</td></tr>";
				for (var i in toDoList){
                    txt+="<tr>"
                    for (var j=0;j<toDoList[i].length-1;j++){
                        txt+="<td style='background-color:"+toDoList[i][2]+"';>"+toDoList[i][j]+"</td>";
                    }
					txt+="</tr>";
				}
				document.getElementById("tableBox").innerHTML=txt;
				document.getElementById("item").value="";
			}
		</script>  
	</body>
</html>

您如果对文章有其他的见解,欢迎指正~响应式网页设计之二维数组

上一篇:python 集合 set


下一篇:CSUSTOJ 2002 Banana(回文树)