1、为什么有数组?
// 之前学习的数据类型,只能存储一个值。我们想存储班级中所有学生的姓名,此时该如何存储?
2、数组的作用:
可以把"一组相关的数据"一起存放,并提供方便的访问(获取)方式。
3、什么是数组:
// 数组是一组数据"有序"的集合。数组它是属于"复合数据类型"。至少可以存储一个值。
// 所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。
4、为什么要使用数组?
// 因为在我们工作中 有很多数据是有关联的 我们要表示的时候想把这些数据用一个”东西”来存储,这个时候就可以用到数组!
5、数组的相关概念:
// 什么是数组元素, 数组元素就是数组中每个数据
// 数组元素的类型, 数组元素的类型可以是JS中的任意类型
// 数组下标(索引), 数组下标默认就是从0开始每次递增1的数字
// 如何访问数组里面的某一个元素, 数组变量名[数组下标]
// 数组的长度, 数组长度就是数组元素的总个数; 通过 数组变量名.length 可以获取数组长度
// ❤注意: 数组长度是一个动态值, 随着数组元素的总个数变化而变化
// ❤❤❤最大数组下标 = 数组长度 - 1;
6、定义数组
6.1 使用[]来定义数组 常用
// 定义空数组
var arr1 = [];
// 定义非空数组
// var 数组变量 = [值1, 值2, 值3...]
var arr2 = ["zhangsan"];
var arr3 = ["abc", 123, true, null, undefined, [10, 20, 30]];
// 获取数组长度
console.log("arr3.length=>", arr3.length);
// 获取某个数组元素
console.log("arr3[0]=>", arr3[0]);
console.log("arr3[2]=>", arr3[2]);
注意: 通过下标访问不存在的数组元素将返回undefined
6.2 使用new Array()构造函数方式来定义数组
// 定义空数组
var arr4 = new Array();
// 定义指定长度的空数组
// var 数组变量名 = new Array( size ); // size是数值
var arr5 = new Array(5);
console.log("arr5=>", arr5);
// 定义非空数组
// var 数组变量名 = new Array( 值1, 值2, 值3, 值4... )
var arr8 = new Array(10, "abc", 30, true, 50, 60);
console.log("arr8=>", arr8);
7、修改数组元素值
语法:
// 数组变量名[数组下标] = 新值
var arr9 = [10, 20, 30, 40, 50];
arr9[1] = 234;
8、多维数组
// JavaScript它本身是没有多维数组的概念,因为在JavaScript中 数组元素的数据类型可以是"任意数据类型"。假设在一个数组中有一些数组元素的的类型还是"数组" 这个时候我们就将它称之为多维数组,也就是数组嵌套数组
8.1 一维数组
// 简单来说,一个数组内所有"数组元素"的数据类型的都"不是数组类型",就是一维数组。
8.2 多维数组
// 超过一维都是可以叫多维,多维数组指的是一个数组中的数组元素又是一个数组。
// 二维数组, 就是数组嵌套数组 只嵌套一层
8.3 如何访问二维数组中的某个数组元素
语法:
// 数组变量名[下标1][下标2]
9、 数组的遍历
// 数组的遍历就是把数组中所有的数组元素都访问一遍
// 由于数组的下标是从0开始的,最大下标是数组长度-1, 所以是可以确定循环次数, 那么我们就推荐使用for循环遍历
9.1 一维数组的遍历
语法:
for(var i = 0; i < 一维数组变量名.length; i++ ){
console.log( 一维数组变量名[i] )
}
9.2 二维数组的遍历
语法:
/* for(var i = 0; i < 二维数组变量名.length; i++ ){
for(var j = 0; j < 二维数组变量名[i].length; j++ ){
console.log(二维数组变量名[i][j]);
}
10、数组的相关方法
10.1 数组添加和删除元素方法:
// push(值1,值2...) 向数组尾部添加一个或者多个值, 返回新的数组长度
// pop() 删除尾部最后一个数组元素 返回被删除的数组元素
// unshift(值1,值2...) 向数组头部添加一个或者多个值, 返回新的数组长度
// shift() 删除头部第一个数组元素 返回被删除的数组元素
// 以上4个方法,都会修改原数组
10.2 合并数组方法:
// concat(数组1,数组2...) 合并多个数组, 合成一个大数组, 将返回一个"新数组" 注意 不是合并成多维数组
// concat()方法中不写参数,将返回原数组一模一样的新数组
// concat()里面放参数
// 合并数组,我们不建议使用+号, 因为+号会把每个数组中数组元素已逗号作为连接符,每个组成拼接成一个字符串, 最后再拼接成一个大字符串 +号其实会调用数组的toString()方法
10.3 数组索引方法:
// indexOf("内容") 查找数组中数组元素第一次出现的位置; 找不到返回-1
// lastIndexOf("内容") 查找数组中数组元素最后一次出现的位置; 找不到返回-1
10.4 数组转换为字符串:
// join("连接符") 把数组元素按指定的连接符拼接成一个字符串 "连接符"参数可以省略,将使用逗号作为连接符
// 小结: 字符串对象的.split()方法是把字符串分割成数组,而数组对象的.join()方法是把数组拼接成字符串
10.5 slice:
含头不含尾
可以用来从数组中提取元素
该方法不会改变元素数组,而是将截取到的元素封装到一个新数组返回
参数:
1.截取开始的位置的索引,包含开始索引
2.截取结束的位置的索引,不包含结束索引
第二个参数可以省略不写,此时会截取从开始索引往后的所有元素
索引可以传递一个负值,如果传递一个负值,则从后往前计算
-1 倒数第一个
-2 倒数第二个
10.6 splice()
可以用于删除数组中的指定元素
使用splice()会影响到原数组,会将指定元素从原数组中删除
并将被删除的元素作为返回值返回
参数:
第一个,表示开始位置的索引
第二个,表示删除的数量
第三个及以后 , 可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边
11、经典算法-冒泡排序:
// 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法
11.1 冒泡排序思想:
// 让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!
// 外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较。
var arr = [5, 4, 3, 2, 1];
// 封装成冒泡排序函数
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换两个变量的值
var temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}