javascript基礎(陣列)(十九)

厚積薄發2017發表於2017-02-08

1.陣列簡介:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*
			 * 陣列(Array)
			 * 	- 陣列也是一個物件,功能和普通物件(Object)的功能類似的
			 * 	- 陣列中也可以儲存不同的元素,不同的是普通物件是通過一個字串作為屬性名來操作屬性的,
			 * 		而陣列是通過索引來操作元素的。
			 * 	- 索引(index)
			 * 		- 索引就是從0開始的整數
			 * 	- 陣列比普通物件的儲存效率要高,在開發中我們經常使用陣列來儲存一些資料
			 */
			
			//建立一個陣列物件
			var arr = new Array();
			
			//使用typeof檢查一個陣列物件時會返回object
			//console.log(typeof arr);
			
			/*
			 * 向陣列中新增元素
			 * 	- 語法:
			 * 		陣列[索引] = 值;
			 */
			arr[0] = 10;
			arr[1] = 20;
			arr[2] = 30;
			arr[3] = 40;
			arr[4] = 30;
			arr[10] = 300;
			arr[78] = 300;
			
			/*
			 * 讀取陣列中的元素
			 * 	- 語法:
			 * 		陣列[索引]
			 */
			
			//如果讀取一個陣列中沒有的元素,會返回undefined
			//console.log(arr[4]);
			
			//獲取陣列的長度
			/*
			 * length
			 * 	- length屬性可以獲取或設定陣列的長度
			 * 	- 對於連續的陣列通過length屬性獲取到的就是陣列中元素的個數
			 * 	- 對於非連續的陣列length屬性獲取到的就是陣列的最大索引+1(不要使用非連續陣列)
			 */
			//console.log(arr.length);//獲取陣列的長度
			
			//修改陣列的length屬性
			//如果將長度修改為小於之前的長度的值,則多餘的部分會被刪除
			arr.length = 5;
			
			//如果將長度修改為大於之前的長度的值,則會陣列中會建立出空的元素
			//arr.length = 10;
			
			//向陣列的最後新增一個元素
			//語法:陣列[陣列.length] = 值;
			arr[arr.length] = 55;
			arr[arr.length] = 75;
			arr[arr.length] = 85;
			
			console.log(arr);
			
			
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>

2.字面量陣列:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*
			 * 陣列的字面量
			 */
			//var arr = new Arry();
			var arr = [] ;
			
			//console.log(arr instanceof Array);
			
			/*
			 * 使用字面量,可以在建立陣列的同時,向陣列中新增元素
			 * 語法:
			 * 	var 陣列 = [元素1,元素2...元素N];
			 */
			arr = [1,2,3,4,5,6,7];
			
			//console.log(arr[6]);
			
			arr = new Array(1,2,3,4,5,6,7);
			
			arr = [10];//建立一個陣列並向陣列中新增一個元素
			
			arr = new Array(10);//建立一個長度為10的陣列
			
			//console.log(arr.length);
			
			/*
			 * 在陣列中可以儲存任意型別的元素
			 */
			arr = [1,"hello",true,null,undefined,{name:"孫悟空"},function(){}];
			
			//console.log(arr[5].name);
			//console.log(arr[6]);
			
			
			//陣列中也可以儲存陣列,如果陣列中儲存的依然是陣列,則我們稱這個陣列為二維陣列
			arr = [
					[1,2,3],
					[4,5,6],
					[5,6,7]
				];
				
			console.log(arr[0][1]);	
			
		</script>
	</head>
	<body>
	</body>
</html>


3.陣列的常用方法 push(),pop(),unshift(),shift():

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 建立一個陣列
			 */
			var arr = ["孫悟空","豬八戒","沙和尚"];
			
			/*
			 * push()
			 * 	- 該方法可以用來向陣列的末尾新增新的元素,並返回陣列的新的長度
			 */
			
			//console.log(arr);
			
			var result = arr.push("唐僧","白骨精","蜘蛛精");
			
			//console.log(arr);
			//console.log("result = "+result);
			
			/*
			 * pop()
			 * 	- 用來刪除並返回陣列的最後一個元素
			 * 	- 元素刪除以後,會自動修正陣列的長度
			 */
			result = arr.pop();
			result = arr.pop();
			
			//console.log(arr);
			//console.log("result = "+result);
			
			/*
			 * unshift()
			 * 	- 向陣列的最前邊新增元素,並返回新的長度
			 */
			result = arr.unshift("牛魔王","鐵扇公主");
			
			console.log(arr);
			//console.log("result = "+result);
			
			/*
			 * shift()
			 * 	- 刪除陣列最前邊的元素,並返回被刪除的元素
			 * 	- 刪除完元素以後,會自動調整陣列的長度
			 */
			result = arr.shift();
			result = arr.shift();
			
			
			console.log(arr);
			console.log("result = "+result);
			console.log(arr.length);
			
		</script>
	</head>
	<body>
	</body>
</html>

4.遍歷陣列:

方式一:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 建立一個陣列
			 */
			
			var arr = ["孫悟空","豬八戒","沙和尚","唐僧","白骨精","蜘蛛精"];
			
			/*
			 * 遍歷陣列
			 * 	- 遍歷陣列就是指將陣列中的每一個元素都獲取到
			 * 	- 一般情況下遍歷陣列都是使用for迴圈來遍歷
			 */
			
			for(var i = 0 ;  i < arr.length ; i++ ){
				console.log(arr[i]);
			}
			
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>
方式二:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
			
			/*
			 * 也可以使用forEach()來遍歷陣列
			 * 	forEach()中需要一個函式作為引數
			 * 	- 像這種由我們定義而不由我們呼叫的函式,我們稱為回撥函式
			 * 	- forEach()中的回撥函式,由瀏覽器呼叫,
			 * 		陣列中有幾個元素函式就會被呼叫幾次,
			 * 		每次遍歷到一個元素都會呼叫一次函式,瀏覽器會通過實參的形式來將遍歷到內容傳遞進函式
			 *  - 瀏覽器在呼叫回撥函式傳遞了三個實參:
			 * 		第一個引數:正在遍歷的元素
			 * 		第二個引數:正在遍歷的元素的索引
			 * 		第三個引數:正在遍歷的陣列物件
			 * 
			 * 	- forEach()方法不支援IE8及以下的瀏覽器,所以如果需要相容IE8則不要使用
			 * 		
			 */
			arr.forEach(function(value , index , obj){
				
				console.log("value = "+value + "  index = "+index+" obj = "+obj);
				
			});
			
		</script>
	</head>
	<body>
	</body>
</html>


5.練習:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			function Person(name , age){
				this.name = name;
				this.age = age;
			}
			
			//向原型中新增toString
			Person.prototype.toString = function(){
				return "Person[name="+this.name+", age="+this.age+"]";
			};
			
			//建立幾個Person的例項
			var per1 = new Person("孫悟空",18);
			var per2 = new Person("豬八戒",28);
			var per3 = new Person("白骨精",16);
			var per4 = new Person("蜘蛛精",14);
			var per5 = new Person("紅孩兒",8);
			var per6 = new Person("奔波霸",58);
			
			//將這些物件儲存到一個陣列中
			var perArr = [per1 , per2 , per3 , per4 , per5 , per6];
			
			//對perArr陣列進行遍歷,並將其中成年人的資訊輸出
			for(var i=0 ; i<perArr.length ; i++){
				//判斷是否是成年人
				if(perArr[i].age > 17){
					console.log(perArr[i]);
				}
				
			}
			
		</script>
	</head>
	<body>
	</body>
</html>


6.陣列方法:slice(),splice():

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
			
			/*
			 * slice()
			 * 	- 可以用來擷取陣列中的指定元素
			 * 	- 引數:
			 * 		第一個引數,擷取開始的位置(包括開始的位置)
			 * 		第二個引數,擷取結束的位置(不包括結束的位置)
			 * 	- 該方法不會影響到原陣列,而是將擷取到的內容封裝為一個新的陣列返回
			 * 	- 可以傳遞一個負數作為引數,如果是負數,則從後往前數
			 * 		-1 表示 倒數第一 
			 * 		-2 表示 倒數第二
			 * 	- 如果省略第二個引數,則從開始位置一直擷取到最後
			 */
			
			var result = arr.slice(1,3);
			
			result = arr.slice(1,-2);
			
			result = arr.slice(1);
			
			//console.log(result);
			
			/*
			 * splice()
			 * 	- 可以用來刪除陣列中的元素,並新增新元素
			 * 	- 它會影響到原陣列,一旦執行原陣列中的元素將會被刪除
			 * 	- 引數:
			 * 		第一個引數,開始位置的索引
			 * 		第二個引數,表示刪除的個數
			 * 		第三個引數,這個方法還可以傳遞多個引數
			 * 			在第三個引數以後,可以跟多個元素作為引數,
			 * 			這些元素將會被插入到開始位置之前的位置
			 * 	- 它會將被刪除的元素作為返回值返回
			 * 		
			 */
			
			arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
			
			//result = arr.splice(0,1);
			
			//牛魔王替換 索引為0的元素
			//result = arr.splice(0,1,"牛魔王");
			
			//arr.splice(2,1,"牛魔王","紅孩兒","二郎神");
			
			arr.splice(2,0,"牛魔王","紅孩兒","二郎神");
			
			console.log(arr);
			
			
		</script>
	</head>
	<body>
	</body>
</html>


練習:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			//建立一個陣列
			var arr = [1,2,3,1,1,1,4,2,3,5];
			
			//去除呼叫陣列中重複的數字
			//獲取陣列中的數字
			for(var i=0 ; i<arr.length ; i++){
				//console.log(arr[i]);
				//再次遍歷陣列
				for(var j=i+1 ; j<arr.length ; j++){
					//console.log("----->" + arr[j]);
					//比較兩個數字是否相等
					if(arr[i] == arr[j]){
						//進入判斷,證明兩個數字重複,則刪除arr[j]
						arr.splice(j,1);
						//需要在此位置在比較一次
						j--;
					}
				}
			}
			
			console.log(arr);
			
		</script>
	</head>
	<body>
	</body>
</html>


7.陣列的其他方法:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			var arr = ["孫悟空","豬八戒"];
			var arr2 = ["白骨精","蜘蛛精"];
			var arr3 = ["太上老君","如來佛祖"];
			
			/*
			 * concat()
			 * 	- 可以用來連線兩個或多個陣列
			 * 	- 不會影響原陣列,而是將新的陣列的返回
			 * 	- 可以將多個陣列作為concat引數傳遞,也可以傳遞單個的元素
			 */
			var result = arr.concat(arr2 , arr3 , "唐僧");
			
			//console.log(result);
			
			/*
			 * join()
			 * 	- 可以將陣列中的所有的元素連線為一個字串
			 * 	- 該方法可以接收一個字串作為引數,這個字串將會將會作為連線符來連線元素
			 * 		如果不傳,預設使用,
			 */
			arr = ["孫悟空","豬八戒","沙和尚"];
			
			result = arr.join("@-@");
			
			//console.log(result);
			
			/*
			 * reverse()
			 * 	- 該方法可以用來反轉陣列
			 * 	- 前邊的去後邊,後邊的去前邊
			 * 	- 它會影響到原陣列,直接在原陣列上反轉
			 */
			
			//arr.reverse();
			
			//console.log(arr);
			
			/*
			 * sort()
			 * 	- 可以用來對陣列中的元素進行排序
			 * 	- sort()會影響到原陣列
			 * 	- 預設它會按照元素的Unicode編碼進行排序
			 * 	- 如果希望使用sort對一個數字型的陣列進行排序可能會得到不可預期的結果
			 * 		因為它同樣也會按照數字的Unicode編碼進行排序
			 * 	- 我們也可以自己來指定排序的規則
			 * 
			 */
			var arr4 = ["a","c","b","e","d","f"];
			
			arr4.sort();
			
			//arr4 = [2,3,10,5,4,6];
			
			
			
			/*
			 * 如果需要自定義排序規則,需要將一個函式作為引數傳遞給sort()方法
			 * 	函式的結構:function(a , b){}
			 * 	
			 * 瀏覽器會多次以陣列中的元素作為實參來呼叫該函式,
			 * 	a和b具體是誰不確定,但是a一定是在b前邊
			 * 瀏覽器將會根據函式的返回值,來決定兩個元素是否互動位置
			 * 	如果返回一個大於0的值,則兩個元素互相交換位置
			 * 	如果返回一個等於0的值,則證明兩個元素相等,位置不變
			 * 	如果返回一個小於0的值,兩個元素的位置也不變
			 * 
			 */
			
			arr4 = [10,4,3,5,2];
			
			arr4.sort(function(a,b){
				
				/*//升序  小 ---> 大
				if(a > b){
					//交換位置
					return 1;
				}else if(a == b){
					return 0;
				}else{
					return -1;
				}*/
				
				//降序 大 ---> 小
				/*if(a > b){
					//交換位置
					return -1;
				}else if(a == b){
					return 0;
				}else{
					return 1;
				}*/
				
				//如果希望升序排列,則 返回 a-b
				//return a - b;
				
				//如果希望降序排列,則 返回 b-a
				return b - a;
				
			});
			
			console.log(arr4);
			
		</script>
	</head>
	<body>
	</body>
</html>



相關文章