# 15.数组

# 1.为什么要学习数组

之前学习的数据类型,只能存储一个值(比如:Number/String。我们想存储班级中所有学生的姓名,此时该如何存储?

# 2.数组的概念

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。

# 3.数组的定义

数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。

创建数组对象的两种方式

  • 字面量方式 var arr = [1,"test",true];
  • 利用new Array() var arr = new Array()
// 创建一个空数组
var arr1 = []; 
// 创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr2 = [1, 3, 4]; 
// 创建一个包含2个字符串的数组
var arr3 = ['a', 'c']; 

// 可以通过数组的length属性获取数组的长度
console.log(arr3.length);
// 可以设置length属性改变数组中元素的个数
arr3.length = 0;
1
2
3
4
5
6
7
8
9
10
11

# 4.获取数组元素

数组的取值

// 格式:数组名[下标]	下标又称索引
// 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。
var arr = ['red', 'green', 'blue'];
arr[0];	// red
arr[2]; // blue
arr[3]; // 这个数组的最大下标为2,因此返回undefined
1
2
3
4
5
6

# 5.遍历数组

遍历:遍及所有,对数组的每一个元素都访问一次就叫遍历。

数组遍历的基本语法:

for(var i = 0; i < arr.length; i++) {
	// 数组遍历的固定结构
}

// 反向遍历
for(var i=arr.length-1;i>=0;i--){
	console.log(arr[i]);
}
1
2
3
4
5
6
7
8

# 6.数组中新增元素

数组的赋值

// 格式:数组名[下标/索引] = 值;
// 如果下标有对应的值,会把原来的值覆盖,如果下标不存在,会给数组新增一个元素。
var arr = ["red", "green", "blue"];
// 把red替换成了yellow
arr[0] = "yellow";
// 给数组新增加了一个pink的值
arr[3] = "pink";
1
2
3
4
5
6
7

# 7.length属性详解

		var arr = [];
		for(var i=1;i<=100;i++){
			if(i%2!==0){
				arr[arr.length] = i; // 空数组的length属性就是从0开始的
				// 使用了 length属性后, 就不需要手动++了
				// 因为length属性是动态改变的
			}
		}
		console.log(arr);
1
2
3
4
5
6
7
8
9
  • 通过arr.length可以给数组追加元素

  • length属性可以获取数组元素的个数

  • 还可以对其进行设置, 影响数组中元素的个数

# 8.案例

求一组数中的所有数的和和平均值
求一组数中的最大值和最小值,以及所在位置
将字符串数组用|或其他符号分割
要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
翻转数组
冒泡排序,从小到大
1
2
3
4
5
6

# 9.冒泡排序

5,4,3,2,1 进行排序

1.一共需要的趟数, 我们用外层for循环
	5个数据我们一共需要走4趟
	长度就是数组长度 减去1   arr.length-1
    
2.每一趟交换次数, 我们用里层for循环
	第一趟交换4次   第一趟 4,3,2,1,5
	第二趟交换3次	  第二趟 3,2,1,4,5
	第三趟交换2次	  第三趟 2,1,3,4,5
	第四趟交换1次	  第四趟 1,2,3,4,5
    长度就是 数组长度 减去次数
    但是我们次数是从0次开始的 所以, 最终arr.length-i-1
    
3.交换两个变量就好了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
外层循环是控制 比较的趟数
内层的循环是控制 相邻元素比较的次数

	<script>
		// 将一个数组中的值从小到大排列
		var arr = [65,97,76,13,27,49,58];
		// 外层循环控制的是比较的趟数
		// 5个元素比较4趟  arr.length个元素比较arr.length-1趟
		var flag = true; // 假设这个已经是排列好的数组 外层优化
		for(var i=0;i<arr.length-1;i++){
			// 内层循环 控制两两比较的次数
			// 5个元素比较4次  arr.length个元素比较arr.length-1趟
			for(var j=0;j<arr.length-1-i;j++){  // 内层优化
				if(arr[j]>arr[j+1]){
					flag = false;
					var temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
			if(flag){
				break;
			}
		}
		console.log(arr);
	</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
上次更新: 2020/10/23 下午8:48:32