8、数组
1.数组的概念
数组(Array)是指一组数据的集合,将一组数据的集合存储在单个变量下,其中的每个数据被称作元素,数组中可以存放任意类型的元素。
2.创建数组
JS 两种创建数组方式:
(1)利用 new 创建数组
var 数组名 = new Array() ;
var arr = new Array(); // 创建一个新的空数组
(2)利用数组字面量创建数组
//1. 创建空的数组
var 数组名 = [];
//2. 创建带初始值的数组
var 数组名 = ['小白','小黑','大黄','瑞奇'];
- 数组的字面量是方括号 [ ]
- 数组初始化:声明数组并赋
- 数组中可以存放任意类型的数据,例如字符串,数字,布尔值等。
var arrStus = ['小白',12,true,28.9];
3.获取数组中的元素
索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始)
数组可以通过索引来访问、设置、修改对应的数组元素
通过“数组名[索引]”的形式来获取数组中的元素
// 定义数组
var arrStus = [1,2,3];
// 获取数组中的第2个元素
alert(arrStus[1]);
注意:如果访问时数组没有和索引值对应的元素,则得到的值是undefined
4.遍历数组
把数组中的每个元素从头到尾都访问一次(类似学生的点名),可以通过 for 循环索引遍历数组中的每一项
var arr = ['red','green', 'blue'];
// 索引号从 0 开始,因此 i 也从 0 开始
for(var i = 0; i < arr.length; i++){
// i 计数器当索引号来用
console.log(arrStus[i]);
}
5.数组的长度
数组的长度:默认情况下表示数组中元素的个数
使用“数组名.length”可以访问数组元素的数量(数组长度)。
var arrStus = [1,2,3];
alert(arrStus.length); // 3
注意:
- 数组长度动态监测数组元素的个数,与索引号无关
- 数组元素个数发生变化,length 属性跟着一起变化
- 数组的length属性可以被修改
- 如果设置的length属性值大于数组的元素个数,则会在数组末尾出现空白元素
- 如果设置的length属性值小于数组的元素个数,则会把超过该值的数组元素删除
// 数组案例
// 1.求数组 [2,6,1,7, 4] 里面所有元素的和以及平均值
var arr3 = [2, 6, 1, 7, 4];
var num = 0;
var average = 0;
for (var i = 0; i < arr3.length; i++) {
num += arr3[i]; // 加的是数组元素,而不是计数器
}
average = num / arr3.length;
console.log(num, average); // 输出多个变量用逗号隔开即可
// 2.求数组[2,6,1,77,52,25,7]中的最大值
var arr4 = [2, 6, 1, 77, 52, 25, 7];
var max = arr4[0];
for (var i = 1; i < arr4.length; i++) {
if (arr4[i] > max) {
max = arr4[i];
}
}
console.log('该数组里面的最大值是:' + max);
// 3.将数组 ['red', 'green', 'blue', 'pink'] 转换为字符串,并且用 | 或其他符号分割
var arr5 = ['red', 'green', 'blue', 'pink'];
var num2 = '';
var sep = '|';
for (var i = 0; i < arr5.length; i++) {
num2 += arr5[i] + sep;
}
console.log(num2);
6.数组中新增元素
(1)改变length长度
数组[ 数组.length ] = 新数据;
var arr6 = [1, 2, 3, 4];
console.log(arr6.length);
arr6.length = 6;
// 这里将数组长度修改为了6
console.log(arr6);
(2)修改索引号,追加数组元素
var arr7 = ['red', 'green', 'blue'];
arr7[3] = 'yellow'; // 新增数组
arr7[0] = 'yellow'; // 替换数组
console.log(arr7);
arr7 = '直接给数组赋值,里面之前存的数组元素会被替代';
console.log(arr7);
7.筛选数组
// 将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来,放入新数组
var arr9 = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
// newArr.length可以自动检测数组长度,刚开始newArr.length是0
for (var i = 0; i < arr9.length; i++) {
if (arr9[i] >= 10) {
newArr[newArr.length] = arr9[i];
}
}
console.log(newArr);
8.数组去重
// 将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]中的 0 去掉后,形成一个不包含 0 的新数组
var arr10 = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr1 = [];
for (var i = 0; i < arr10.length; i++) {
if (arr10[i] !== 0) {
newArr1[newArr1.length] = arr10[i];
}
}
console.log(newArr1);
7.翻转数组
// 将数组 ['red', 'green', 'blue', 'pink', 'purple'] 的内容反过来存放
var arr11 = ['red', 'green', 'blue', 'pink', 'purple'];
var newArr2 = [];
for (var i = arr11.length - 1; i >= 0; i--) {
newArr2[newArr2.length] = arr11[i];
}
console.log(newArr2);
8.数组排序(冒泡排序)
//数组排序(冒泡排序):依次比较两个元素,如果顺序错误就交换过来
var arr12 = [4, 1, 2, 3, 5];
for (var i = 0; i < arr12.length - 1; i++) {
// 外层循环管趟数
for (var j = 0; j < arr12.length - i - 1; j++) { // 里层循环管每一趟的次数
if (arr12[j] > arr12[j + 1]) {
var temp = arr12[j];
arr12[j] = arr12[j + 1];
arr12[j + 1] = temp;
}
}
}
console.log(arr12);