数组 Array
学习目标
- 为什么要有数组
- 如何创建数组
- 如何获取数组中的元素
- 如何对数组进行遍历
- 如何给数组新增元素
- 能够完成冒泡排序案例
为什么学习数组?
之前学习的数据类型,只能存储一个值(比如:Number/String)。如果我们想存储班级中所有学生的成绩,该如何存储?此时就需要用到数组。数组可以将一组相关数据一起存放,并提供方便的访问方式。
数组的概念
所谓数组(Array),就是一组数据的集合。
- 将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。
- 数组是一组有序的数据集合。数组内部可以存放多个数据,不限制数据类型,并且数组的长度可以动态的调整。
- 数组是将一组数据储存在单个变量名下的优雅方式。
创建数组
- 创建数组并赋值称为数组的初始化
- 创建数组最简单常用的方式就是数组字面量方式。
- 数组的字面量:[]
空数组[];
- 一般将数组字面量赋值给一个变量,方便后期对数组进行操作。
var arr = [];
- 如果存放多个数据,每个数据之间用逗号分隔,最后一个后面不需要加逗号。
var arr2 = [1, true, false, null, undefined, "haha", [7, 8]];
- 数组的字面量:[]
获取数组元素
- 存放在数组里的数据就是数组元素
- 数组可以通过一个 index(索引值/下标)去获取对应的某一项的数据,进行下一步操作。
- index:从 0 开始,按照整数排序往后顺序排序,例如 0,1,2,3……
- 通过 index 获取某一项值之后,可以使用或者更改数组项的值。
- 调用数据:利用数组变量名后面直接加
[index]
方式。
arr[index]
打印下标为0的项
console.log(arr2[0]);
- 注意:如果索引值超过了数组最大项,相当于这一项没有赋值,内部存储的就是 undefined。
var arr = [1, true, false, null, undefined, "haha", [7, 8]];
//没有第七项,打印出的结果为undefined
console.log(arr2[7]);
- 更改数据:
arr[index]
调用这一项数据,后面等号赋值更改数据。
var arr2 = [1, true, false, null, undefined, "haha", [7, 8]];
arr2[4]=5;
console.log(arr2);
//此时数组中的undefined变为5
- 注意:如果直接给数组名字赋值,则会覆盖掉以前的数据
arr="数组赋值"
数组的长度
- 数组有一个 length 的属性,记录的是数组的数据的总长度。
- 使用方法:数组名.length
var arr2 = [1, true, false, null, undefined, "haha", [7, 8]];
console.log(arr.length);
- 数组的长度与数组最后一项的下标存在关系,最后一项的下标等于数组的 length-1。
- 获取最后一项的数据时,可以这样书写:
console.log(arr[arr.length-1]);
新增或缩减数组元素
数组的长度不是固定不变的,可以发生更改。
- 增加数组长度:
- 直接给数组 length 属性赋一个大于原来长度的值。赋值方式使用等号赋值。空数组内容打印出来是undefined。
arr2.length = 12;
- 或者,可以给一个大于最大下标的项直接赋值,也可以强制拉长数组。前面没有内容的数组项,在控制台中显示为empty*3(几个空项就乘几),他们的内容打印出来都是undefined。
arr2[10]=10;
- 直接给数组 length 属性赋一个大于原来长度的值。赋值方式使用等号赋值。空数组内容打印出来是undefined。
- 缩短数组长度:强制给 length 属性赋值,后面数据被会直接删除,删除是不可逆的。
arr2.length = 5;
注意:如果直接给数组名字赋值,则会覆盖掉以前的数据
数组遍历
- 遍历:对数组的每一个元素都访问一次就叫遍历。利用 for 循环,将数组中的每一项单独拿出来,进行一些操作。
- 根据下标在 0 到 arr.length-1 之间,进行 for 循环遍历。
var arr = [45, 56, 76, 88, 89, 90, 100, 34, 56];
for (var i = 0; i <= arr.length-1; i++) {
console.log(arr[i]);
}
- 给每一项加5
for (var i = 0; i < arr.length; i++) {
// 获取每一项值,等号赋新值
arr[i] += 5;
console.log(arr[i]);
}
数组应用案例
- 求一组数中的所有数的和以及平均值。
var arr = [45, 56, 76, 88, 89, 90, 100, 34, 56];
// 累加器,积累数组每一项的和,初始值为0
var sum = 0;
// 遍历数组,将每一项累加到sum里
for (var i = 0; i <= arr.length - 1; i++) {
sum += arr[i];
}
// 平均值等于总和除以人数,总人数为数组长度
var avg = sum / arr.length;
console.log("这组成绩总和为" + sum,"这班级平均成绩为" + avg);
//console.log想要输出多个值用逗号分隔
- 求数组中的最大值
var arr = [2, 6, 1, 77, 52, 25, 7];
var max = arr[0];
for (var i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i]
}
}
console.log(max);
- 将数组
["red","green","blue","pink"]
转换为字符串,并且用|符号分隔
var arr = ["red", "green", "blue", "pink"];
var str = "";
var sep = "|";//sep分隔符的缩写
for (var i = 0; i < arr.length; i++) {
str += arr[i] + sep;
}
console.log(str);
- 新建数组,里面存放十个整数
var arr = [];
for (i = 0; i < 10; i++) {
arr[i] = i + 1;
}
console.log(arr);
- 将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]大于十的元素筛选出来,放入新的数组。
方法一:
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
var j = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
newArr[j] = arr[i];
j++;
}
}
console.log(newArr);
方法二:
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
newArr[newArr.length] = arr[i];
}
}
console.log(newArr);
- 将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]中的0去掉后,形成一个不包含0的新数组。
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
newArr[newArr.length] = arr[i];
}
}
console.log(newArr);
- 将数组[“red”, “green”, “blue”, “pink”, “purple”]的内容反过来存放
var arr = ["red", "green", "blue",
"pink", "purple"];
var newArr = [];
for (i = arr.length - 1; i >= 0;
i--) {
newArr[newArr.length] = arr[i]
}
- 数组排序(冒泡排序)
冒泡排序是一种算法,把一系列的数据按照从小到大或从大到小的顺序进行排列。 - 把[5, 4, 3, 2, 1]从小到大排序
var arr = [5, 4, 3, 2, 1];
//外层循环控制趟数
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];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);