前面学习了有关变量、分支结构、循环结构的基础知识。今天将对下一个非常重要的知识点进行学习,那就是数组
一、 数组的定义
数组可以把一组相关的数据一起存放,方便程序员的访问与获取。
数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组可以将一种或者一组数据存储在单个变量名下的存储方式方式。
// 普通变量 只能存一个值
var num = 1;
// 数组一次可以存储多个值
var arr = [1,2,3,4,5];
二、 如何创建数组
2.1 使用 new 关键字
var 数组名 = new Array() ;
var arr = new Array(); // 创建一个新的空数组
注意: Array () ,A 要大写 !!!
2.2 利用数组字面量创建数组
何为字面量?其实就是看到这个符号就能知道这个变量的类型。
数组的字面量是: [ 使用,分隔 ] 。这种方式也是我们以后最多使用的方式。
2.3 数组元素的类型
数组中可以存放任意类型的数据,例如字符串,数字,布尔值等。
这一点和其他的编程语言不太一样,其他的编程语言会要求数组的元素类型必须一致,但是JS放宽了这一限制。
三、数组元素的获取
使用数组的索引进行获取。索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始)。
数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的 元素。
// 定义数组
var arr1 = [1,2,3];
// 获取数组中的第2个元素
alert(arr1[1]);
当访问越界元素(超出数组个数,显示Undefined)
// 定义数组
var arr1 = [1,2,3];
// 获取数组中的第4个元素
console.log(arr1[3]);
//没有第四个元素,显示Undefined
四、 遍历数组
数组的获取一次只能获取一个元素,如何一次获取多个元素?结合循环结构。
这里需要使用到一个获取数组长度的方法 arr.length 。这里返回的结果是数组元素的个数。作为我们的结束判断。
<script>
// 遍历数组:就是把数组的元素从头到尾访问一次
var arr1 = ['张三', '雪绒花', '哈哈哈哈'];
for (let i = 0; i < arr1.length; i++) {
console.log(arr1[i]);
1
}
// 1. 因为我们的数组索引号从0开始 ,所以 i 必须从 0开始 i < 3
// 2. 输出的时候 arr[i] i 计数器当索引号来用
</script>
有关遍历我们写一个求和的案例:
<script>
var arr = [58, 59, 60, 61, 62];
var sum = 0;
var average = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
average = sum / arr.length;
console.log('总和:' + sum);
console.log('平均:' + average);
</script>
有关遍历我们写一个求极值的案例:
<script>
var arr = [88, 55, 94, 286, 31, 40, 158];
var max = arr[0];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= max) {
max = arr[i];
}
}
console.log('最大值' + max)
</script>
思路分析:
1、 声明一个保存最大元素的变量 max。
2、 默认最大值可以取数组中的第一个元素。
3、 遍历这个数组,把里面每个数组元素和 max 相比较。
4、 如果这个数组元素大于max 就把这个数组元素存到 max 里面,否则继续下一轮。
5、 最后输出这个 max。
五、 数组的增删改查
5.1 通过修改 length 长度新增数组元素
length 属性是可读写的!!!
如果只扩容了,但是还没有填充内容,此时如果去访问,默认值就是 undefined。
5.2 通过修改数组索引新增数组元素/修改元素
可以通过修改数组索引的方式追加数组元素。
但是,如果此时位置上已经有元素了,其实就是实现了元素的修改。
5.3 使用新增元素的方法填充数组案例
<script>
var arr = [];
for (let i = 0; i < 10; i++) {
arr[i] = i + 1;
console.log(arr[i]);
}
</script>
5.4 筛选数组重新填入新数组案例( 灵活使用length,length 自动增加)
<script>
var arr = [22, 31, 5, 8, 9, 77, 26, 49];
var newarr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= 10) {
newarr[newarr.length] = arr[i];
}
}
for (let i = 0; i < newarr.length; i++) {
console.log(newarr[i]);
}
</script>
重点:灵活使用length,length 自动增加!!!
5.5 数组元素的删除
这个其实和筛选的思路是一样的。将不满足的排除,剩下的存入新数组。这里就不赘述。直接放一个例子。
删除0元素的案例:
<script>
var arr = [88, 0, 59, 0, 0, 0, 123, 49, 52];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
newArr[newArr.length] = arr[i];
}
}
console.log(newArr);
</script>
六、 反转排序
这个算法的核心思路是:逆序输出旧数组的元素,然后存入新的数组。
<script>
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newarr = [];
for (let i = arr.length - 1; i >= 0; i--) {
newarr[newarr.length] = arr[i];
}
console.log(newarr);
</script>
七、 冒泡排序(必考,必会)
冒泡排序:是一种算法,把一系列的数据按照一定的顺序进行排列显示(从小到大或从大到小)。这是一个经典的算法案例,必须要熟练掌握。
实现的思路:
1、明确一共需要进行多少轮大循环(外循环): arr.length -1 ;
2、明确第 i 轮中需要比较多少次: arr.length - i -1 ;
3、比较过程中按照 规定的顺序交换就可以
这里给出一个例子:对 [ 24, 35, 12, 3, 88] 进行升序排列
<script>
// 冒泡排序
var arr = [24, 35, 12, 3, 88];
var temp;
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] >= arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
</script>