第四章 数组 ① 笔记

回顾

循环:

while
计数变量
while(条件){
  // 循环体
  计数变量更新
}
do…while
for
for(计数变量;条件;计数变量更新){
  循环体
}

break: 遇到break循环结束
continue: 遇到continue,则后面的代码不执行,直接进入下次循环
break和continue: 可以和while,do…while,for结合使用
break和switch结合使用
费曼学习法:对学过的东西向别人表述,确保别人能听懂
补充案例:

	//循环输入5个人的分数,如果分数无误则输出总分,平均分
	// 如果录入的某个分数有误(小于0或大于100),则直接终止循环,并且输出错误提示,另外,不
	//循环输入5个人的分数,如果分数无误则输出总分,平均分
	// 如果录入的某个分数有误(小于0或大于100),则直接终止循环,并且输出错误提
	//另外,不能输出总分和平均分。
	//定义求和变量
	var sum = 0;
	//定义标记变量,用于记录错误情况
	var flag = false;
	// 循环输入
	for(var i=1;i<=5;i++){
		// 输入分数
		var score = Number(prompt("请输入第"+i+"个学生的分数",""));
		// 如果分数有误,则提示错误,修改标记,结束循环
		if(score<0 || score>100){
			document.write("出错了");
			flag = true; //修改标记
			break; //结束循环
		}
		// 累加分数
		sum += score;
	}
	if(flag==false){
		// 输出总分平均分
		document.write("总分:"+sum+" 平均分:"+sum/5);
	}

嵌套循环
a. 输出每一年的每一月
b. 输出5*5星星
c.输出三角形
1.d.输出九九乘法表

本章目标

数组定义
数组的访问赋值
数组的插入,删除,遍历
数组的方法

第一节:数组

1.1 什么是数组(数组就是一组数)

数组(Array)是有序的元素序列。 [1] 若将有限个变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把若干元素按有序的形式组织起来的一种形式。 [1] 这些有序排列的数据元素的集合称为数组。数组是用于储存多个相同类型(强类型语言存储相同类型的数据java,c#。弱类型语言的数组,可以存储各种类型的数据)数据的集合。
数组是有次序的元素序列:
数组中的每一个元素都有一个属于自己的编号 编号从0开始,到数组长度减1为止, 被称为下标。
数组的中数据如何存取:
通过下标存取,就是区分数组中的每一个数据。
数组名[下标]

在这里插入图片描述

1.2 为什么要用数组

对于存储大量数据的时候, 数组可以方便的批量开辟空间,存储批量数据,不需要一个
一个定义变量。

1.3 数组的常规使用

1.3.1 数组的定义
	// 方式一:创建一个空数组,没有空间长度
	var 数组名 = new Array();
	// 方式二:创建指定长度空间的数组
	var 数组名 = new Array(长度数字);
	// 方式三:创建具有一些初始值的数组
	var 数组名 = new Array(数据1,数据2,数据3);
	// 方式四: 用字面量"[]",创建空数组。**常用**
	var 数组名 = [];
	// 方式五: 用字面量"[]",创建有初始值的数组 **常用**
	 var 数组名 = [数据1,数据2,数据3...];
1.3.2 数组的取值和赋值**

数组取值:数组名[下标];
数组赋值(修改):数组名[下标] = 要修改的值;
注意:当下标超过了数组长度时,在js中会动态扩展数组长度。在java中会爆出下标越界
异常。

<script type="text/javascript">
	//普通变量:一次存储一个数据
	//数组:可以存储批量数据
	//场景:存储一个班级60人的js分数
	/*var score1 = 78;
	var score2 = 89;
	var score3 = 98;
	....
	var score60 = 76;*/
	//如何创建一个数组
	//方式1: var 数组名 = new Array(长度); //长度可以省略
	//方式2: var 数组名 = new Array(数据1,数据2,数据3);//创建有初始值的数据
	//方式3: var 数组名 = []; //用字面量的方式创建一个空数组
	//方式1:var 数组名 = new Array(长度)
	//创建一个空数组
	//var ary1 = new Array();
	//创建一个长度为5的数组空间
	var ary = new Array(5);
	//length:输出数组的长度
	document.write("长度:"+ary.length+"<br/>");
	//数组的赋值:数组名[下标] = 数据
	ary[0] = 98;
	ary[1] = 33;
	ary[4] = 56;
	//访问数组的内容
	document.write(ary[0]+"<br/>");
	document.write(ary[1]+"<br/>");
	document.write(ary[2]+"<br/>");
	document.write(ary[3]+"<br/>");
	document.write(ary[4]+"<br/>");
	document.write("<hr/>");
	document.write(ary[5]); //超出数组下标,不会报错,输出undefined
	document.write("<hr/>");
	//使用循环输出数组内容
	//ary.length是5:i的变化: 0 1 2 3 4
	for(var i=0;i<ary.length;i++){
	document.write(ary[i]+"<br/>");
	}
</script>
<script type="text/javascript">
	// var ary = new Array(); //长度为0的数组
	// var ary = new Array(10); //只有一个整数,
	// 表示数组长度是10,此时数组内容都是undefined
	/*
	//创建长度为4的数组,数组初始数据分别是10,11,12,13
	var ary = new Array(10,11,12,13);
	//长度
	document.write("长度:"+ary.length+"<br/>");
	document.write(ary[0]+"<br/>");
	document.write(ary[1]+"<br/>");
	document.write(ary[2]+"<br/>");
	document.write(ary[3]+"<br/>");
	*/
	/*
	//使用字面量定义空数组
	var ary = [];
	document.write("长度:"+ary.length+"<br/>");
	//js的数组可以动态扩展
	ary[0] = 10;
	ary[1] = 20;
	ary[2] = 30;
	document.write("长度:"+ary.length+"<br/>");
	*/
	// new Date():获取系统时间
	// 数组中的数据可以存储任意类型
	var ary = ["abc",100,2.234,new Date()];
	document.write("长度:"+ary.length+"<br/>");
	for(var i=0;i<ary.length;i++){
	//使用 数组名[下标] 访问每个数组元素
	document.write(ary[i]+"<br/>")
	}
	document.write("<hr/>");
	//使用for each方式输出数组元素
	// 其中i是数组的下标
	for(var i in ary){
	alert(i+" : "+ary[i]);
	}
</script>
1.3.3数组遍历

使用普通for循环遍历重点练习

	var ary = ["abc",100,2.234,new Date()];
	document.write("长度:"+ary.length+"<br/>");
	for(var i=0;i<ary.length;i++){
		//使用 数组名[下标] 访问每个数组元素
		document.write(ary[i]+"<br/>")
	}
1.3.4 使用forEach遍历
	var ary = ["abc",100,2.234,new Date()];
	document.write("长度:"+ary.length+"<br/>");
	//使用for each方式输出数组元素
	// 其中i是数组的下标
	for(var i in ary){
		alert(i+" : "+ary[i]);
	}

1.4 数组的操作

1.4.1 数组的查找 (重点练习)

1.请输入5个学生的成绩,并存储到数组中
2.遍历数组查找分数是80分的,是第几个学生
在这里插入图片描述

<script type="text/javascript">
	//定义数组存储5个学生的成绩
	//并查找第一个80分的成绩是在数组的哪个位置上
	//输入成绩:89,56,78,80,98
	// 0 1 2 3 4
	// 76,80,88,87,32
	// 0 1 2 3 4
	//定义长度为5的数组
	var aryScore = new Array(5);
	//循环输入5个学生的分数
	for(var i=0;i<aryScore.length;i++){
		//输入学的分数
		var score = Number(prompt("请输入第"+(i+1)+"个学生的分数:",""));
		//将分数存储到数组中
		aryScore[i] = score;
	}
	//直接打印数组
	//document.write(aryScore);
	//循环遍历数组,并判断每个数组元素是不是80分,是80分则显示对应的数组下标
	for(var i=0;i<aryScore.length;i++){
		//alert(aryScore[i]);
		//遍历数组,判断当前遍历的数据是否是80
		if(aryScore[i]==80){
			alert("80分的下标是:"+i);
			break;
	}
	}
</script>
1.4.2 数组的插入

已知某数组: var ary = [20,12,33,45,67];
现在要输入一个任意数据,插入到数组下标为2的位置上
在这里插入图片描述

<script type="text/javascript">
	//已知数组:20,12,33,45,67
	//在下标为2的位置上插入一个数据(自己输入)
	var ary = [20,12,33,45,67];
	document.write(ary+"<br/>")
	var num = Number(prompt("请输入一个要插入的数据:",""));
	//使用循环进行移位操作
	for(var i=ary.length;i>2;i--){
		//将数组中前边的数据移位到后边
		ary[i] = ary[i-1];
	}
	//将要插入数据存储到下标2的数组空间上
	ary[2] = num;
	document.write(ary);
</script>
1.4.3 数组的删除

在这里插入图片描述

1.4.4 冒泡排序

排序:
什么是排序: 将数据由底到高,由高到低按照特定次序呈现
为什么要排序: 通过排序可以直接拿到特定的数据,提升数据的利用效率
排序的核心: 比较和换位
在这里插入图片描述
数据结构可视化 数据结构可视化
在这里插入图片描述

Web 开发技术 Web 开发技术
超链接如下:https://developer.mozilla.org/zh-CN/docs/Web
在这里插入图片描述

<script type="text/javascript">
	// 冒泡排序
	// 数据比较换位
	var ary = [56,32,8,76,12,1,3,6,4,5,100,99];
	// 0 1 2 3 4
	document.write(ary+"<br/><hr/>"); //56,32,8,76,12
	// N元数组冒泡序,两两相比小前移
	// 外层循环从1始,内层循环减i去
	//冒泡排序
	for(var i=1;i<ary.length;i++){
		// 实现了第一轮的四次比较
		for(var j=0;j<ary.length-i;j++){
			// 比较和换位
			if(ary[j]>ary[j+1]){
				var temp = ary[j];
				ary[j] = ary[j+1];
				ary[j+1]=temp;
			}
		}
	}
	document.write(ary+"<br/><hr/>"); //
</script>

扩展选择排序,二分法 了解。

1.5 数组的常用方法/函数

名称描述
join(分隔符)将数组转换为使用特定分隔符连接的字符串
concat(arr1,arr2)与另一个数组合并为一个新数组
reverse()将数组反转
sort()对数组进行排序,按字符大小规则逐位比较排序,不是按数值大小
push(ele1,ele2)向数组末尾添加新元素
unshift(ele1,ele2)向数组的开头添加新元素
pop()删除数组中末尾的值 返回删除的值
shift()删除数组中开头的值 返回删除的值 与pop()相反
splice(位置,删除个数,新数据…)删除、替换、插入数组元素
indexOf(ele)查找元素的下标位置
	//var ary = [20,10,30,50,60];
	//document.write(ary+"<br/>");
	// 将数组中的元素,用指定的符号拼接为字符串
	//var res = ary.join("----");
	//document.write(res);
	// 将数组中的反转
	//ary.reverse();
	//document.write(ary);
	//var ary2 = [];
	// 向数组中添加元素,从数组最后添加
	//ary2.push(100);
	//ary2.push("abc");
	//ary2.push(2.34);
	//document.write(ary2+"<br/>");
	// 删除数组末尾的值
	//ary2.pop();
	//document.write(ary2);
	//var ary3 = ["aaa","bbb","ccc","ddd","eee"];
	//document.write(ary3+"<br/>")
	// 使用splice删除下标为2的元素
	// 从下标2的位置,删除一个元素
	//ary3.splice(2,1);
	//document.write(ary3);
	// 从下标2的位置,不删除元素,但是添加两个新元素
	//ary3.splice(2,0,"xxx","yyy");
	//document.write(ary3);
	// 查找数组中某个元素的位置
	// 如果找不到返回-1
	//alert(ary3.indexOf("ggg"));
	var ary4 = [5,3,2,1,4,12,100];
	document.write(ary4+"<br/>");
	// 对数组元素排序:按照字符串的字符次序依次比较
	ary4.sort();
	document.write(ary4);

总结:

数组的定义
数组的赋值和使用
数组操作: 遍历查找,插入,删除
数据的常用方法

练习:

基础作业
0. 输出一个数组中所有80分的位置。
1.定义长度为 5的数组,使用循环通过输入框输入分数存入对应的数组元素中,并遍历输出。
2. 循环输入5个分数存入数组,如果分数输入有误(小于0,大于100),要提示输入错误,如果无误则输出数组。
3. 定义长度为10的数组,存储10个人的分数。统计大于80分的人数。
循环输入9个数字存入数组,然后3个一排输出
23,45,67,
98,12,44,
55,66,77
4.循环输入5个数字到数组中,统计最大值,最小值,最大值的位置和最小值的位置
 var ary = [10,40,32,89,12]
5.使用splice实现有序数组的数据插入。
 通过输入框输入一个数,将输入的数字插入到数组中之后要保证数组依然有序:
 示例: 数组 [10,50,70,89,99],输入一个数字 83,将83插入到数组中,插入之后数组
依然有序,数组变为[10,50,70,83,89,99]

...给定一个有序数组ary
//定义变量,记录数组中,第一个比要插入的数据大的位置
	var pos = -1;
	for(var i=0;i<ary.length;i++)
	{
	//将数组中的数据和要插入的数据挨着比较
	if(ary[i]>num)
	{
	//当找到第一个比插入的数据大的数据时,记录这个数据的位置,并退出循环
	pos = i;
	break;
	}
	}
	alert(pos);
	//循环之后,找到要插入的位置
	//使用splice函数,将要插入的数据,插入到指定位置
	ary.splice(pos,0,num);
	//输出插入后的结果
	document.write(ary);

扩展作业
1.var ary = [10,20,30,40,50,10,20,34,56,50]
 将数组中的去重,返回去重之后的数组
2.定义长度为50的数组,用于存储1-100的随机数(Math.random()),要求50个数据都不能重复。
3.再学习两种新的排序算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值