js_day14--js数组


Day14



js数组

为什么需要数组呢?

      王大爷有六只乌龟,它们的体重分别是3Kg, 5Kg, 1Kg, 3.4Kg, 2Kg, 50Kg,请问这六只乌龟的总体重是多少?平均体重是多少?请你用现在掌握的技术编一个程序解决。

      如果使用传统的方法来解决这个问题,就要定义6个变量,那么如果王大爷养的不是6只,而是600只呢?所以说这种方法很麻烦。

 

à故解决方法:要用数组!

使用数组这种数据类型(复合类型/复杂类型/引用类型)。

数组的基本概念:用于存放一组数据

Javascript中数组的特点:不区分数据类型!即它可以存放各种类型(数值,字串)。

 

●一维数组

      基本用法:

      Var 数组名 = [元素值,元素值,…]\;

特别说明:元素的值可以是任意类型。


var  arr =[1,45,”hello world”,true];

王大爷养乌龟问题:


<html>
	<head>
		<script language="javascript">
			var weights = [3,5,1,3.4,2,50];//有整数,有小数,都可以
			var all_weight =0;
			var avg_weight =0;
			for(var i =0;i < weights.length;i++){
				document.writeln(weights[i]+" ");	
				all_weight += weights[i];
			}
				avg_weight=all_weight/weights.length;
				//平均体重保留两位小数
				document.writeln("总体重是"+all_weight+"平均体重是"+avg_weight.toFixed(2));
			</script>
		</head>
	<body>
		</bod>
	</html>

1)数组在内存中的存在形式:



2)数组在js中也是引用传递

 案例:


<html>
	<head>
		<script language="javascript">
			
			var myval = 900;
			function abc(val){
					val =90;
			}
			abc(myval);
			window.alert(myval); //这里输出900,因为不是引用传递
			
			var myarr=[456,90,900];
			function abc2(arr){
					arr[0] = 35;
			}	
			abc2(myarr);
			for(var i=0;i<myarr.length;i++){
					document.writeln(myarr[i]);
			}
			</script>
		</head>
	<body>
		</body>
	</html>

分析图:


3)数组的引用

      数组名[下标],下标也是从0开始的。

那么当你访问一个越界的值时候,会报什么错误?

àundefined

 

      结论:不能访问不存在的元素。

 

4js中的数组可以动态增长!---与其他语言有很大区别。

                    var a=[1,2];

                    alert(a.length);

                    a[2]=4;  //数组长度增加了

                    alert(a.length);

                    alert(a[2]);

 

5js数组的几个重要应用

             使用数组名.length可以获得数组的长度

使用split可以将一个字串截取成数组,与java中的spilt一样

		var string="My name is Gavin";
		var name=string.split(" ");
		document.writeln(name);// 输出My,name,is,Gavin

5)遍历数组的另一种方式

      举例:

			arr=[12,34,5];
			arr['gg']=9000;//下标不一定是数字—>了解即可
			for(var key in arr){
				alert(key+"= "+arr[key]);
				}

★一维数组小结

数组可以存放任意类型的数据

数组大小不必事先指定,可以动态增长

数组名可以理解为指向数组首地址的引用

数组元素从0开始编号

 

●多维数组二维数组

一维数组的元素还可以是一个数组,就构成了二维数组

实例:var arr =[[1,2,3],[“你好”.23,false]];

看看如何遍历二维数组

应用:二维数组的转置

				//矩阵的转置
				var arr=[[2,4,6,8],[8,9,0,-1],[9,6,2,1]];
				//定义一个新的数组
				var arr2=[];
				//初始化 定下新的数组有多少行
				for(var i=0;i<arr[0].length;i++){
					arr2[i] = [];	
				}
				
				//可以动态添加数据了
				//遍历旧的数组
				for(var i=0;i<arr.length;i++){
					for(var j =0;j<arr[i].length;j++){
						arr2[j][i] = arr[i][j];
						}
					}
				for(var i=0;i<arr2.length;i++){
					for(var j=0;j<arr2[i].length;j++){
						document.writeln(arr2[i][j]+" ");
						}
						document.writeln("<br/>");
					}

js语法排序

冒泡:

//冒泡排序
				var flag = false;//优化设置
				var arr=[5,0,-56,900,12,45,67,45,34,784];
			//	var arr=[1,2,3,4,5,6];
				for(var i =0;i<arr.length-1;i++){
					document.writeln("大循环...");//看一下优化效果
					for(var j=0;j<arr.length-1-i;j++){
						if(arr[j]>arr[j+1]){
							//交换
								var temp = arr[j];
								arr[j] = arr[j+1];
								arr[j+1] = temp;
								flag = true;
						}
					}	
					if(flag == true){
						flag = false;
					}else {
						break;
						}
				}
				//打印
				for(var i =0;i<arr.length;i++){
						document.writeln(arr[i]+" ");	
				}

js语法查找

二分查找:前提是数组是有序的,若不是有序的,则不能使用二分查找。

//二分查找
				var arr=[1,2,4,5,6,7,8,9,34,23,78];
				binarySearch(arr,7,0,arr.length-1);
	//思路;找到数组中间的数(midVal),和你要查找的数(findVal)进行比较,如果
//midVal>findVal,则说明findVal在数组的左边,就把该数组二分,继续在
				//左半边查找,在左边继续二分。
				function binarySearch(arr,findVal,leftIndex,rightIndex){
					//找到中间的值,一定要下取舍,因为javascript不会自动取整
					var midIndex = Math.floor((leftIndex+rightIndex)/2);
					var midVal=arr[midIndex];	
					//进行查找有一个前提,防止是无穷递归
					if(leftIndex>rightIndex){
						document.writeln("找不到");
						return;
						}
					
					//比较
					if(midVal>findVal){
						//在左边找
						binarySearch(arr,findVal,leftIndex,midIndex-1);
						}else if(midVal<findVal){
							//在右边找
								binarySearch(arr,findVal,midIndex+1,rightIndex);
							}else{
								document.writeln("找到了,下标为"+midIndex);
								return;
								}
				}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值