# 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
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
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
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
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
2
3
4
5
6
7
8
9
通过arr.length可以给数组追加元素
length属性可以获取数组元素的个数
还可以对其进行设置, 影响数组中元素的个数
# 8.案例
求一组数中的所有数的和和平均值
求一组数中的最大值和最小值,以及所在位置
将字符串数组用|或其他符号分割
要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
翻转数组
冒泡排序,从小到大
1
2
3
4
5
6
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
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
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