数组的定义和基本使用

1)数组简介和定义

什么是数组

image.png

数组的定义方法1

image.png
数组的定义方法2
image.png

数组的定义方法3

image.png

访问数组项

image.png

下标越界

image.png

数组的长度

image.png

更改数组项

image.png

数组的遍历

image.png

2)数组类型的检测

image.png
image.png

数组的常用方法

数组的常用方法1

数组的头尾操作

image.png

push()方法

image.png

  1. var arr = [1, 2, 3, 4, 5, 6];
  2. //方法就是打点调用的函数,所以是打点调用
  3. arr.push(6);
  4. arr.push(7,8);
  5. console.log(arr)

pop()方法

image.png

  1. var arr=[1,2,3,4,5,6,7]
  2. var item=arr.pop();
  3. console.log(item);
  4. console.log(arr);

image.png

unshift()方法

image.png
image.png

shift()方法

image.png

  1. var arr = [1, 2, 3, 4, 5, 6];
  2. var item = arr.shift();
  3. console.log(arr);
  4. console.log(item);

image.png

2)数组的常用方法2

splice()方法

image.png
image.png
image.png
image.png

slice()方法

image.png
image.png

3)数组的常用方法3

join()和split()方法

image.png
image.png
image.png
image.png

字符串和数组更多相关性

image.png

concat()方法

image.png

reverse()方法

image.png
image.png

indexOf()和includes()方法

image.png
image.png

有关数组排序

image.png

数组算法

1)遍历相关算法

题目:求数组中每一项的总和、平均数

image.png

  1. //求数组的总和
  2. var arr = [3, 4, 5, 6, 7]
  3. //累加器
  4. var sum = 0;
  5. //遍历数组,每遍历一个数字,就要把这个数字累加到累加器中
  6. for (var i = 0; i < arr.length; i++) {
  7. sum += arr[i];
  8. }
  9. console.log(sum);
  10. console.log(sum/arr.length);

思路:求数组最大值

image.png

  1. //求数组的最大值和最小值
  2. var arr = [1, 24, 56, 7, 78, 85, 765, 7];
  3. //定义两个变量,max表示当前寻找到的最大值,默认是arr[0]
  4. //定义两个变量,Mmin表示当前寻找到的最小值,默认是arr[0]
  5. var max = arr[0];
  6. var min = arr[0];
  7. //遍历数组,从下标为1的项开始
  8. for (var i = 1; i < arr.length; i++) {
  9. //如果你遍历的这项,比当前最大值大,那么就让当前最大值成为这个项
  10. if (arr[i] > max) {
  11. max = arr[i];
  12. } else if (arr[i] < min) {
  13. //如果你遍历的这项,比当前最小值小,那么就让当前最小值成为这个项
  14. min = arr[i];
  15. }
  16. }
  17. console.log(max, min)

2)数组去重和随机样本

数组去重

image.png

  1. var arr = [1, 24, 56, 7, 78, 85, 7, 765, 7];
  2. //结果数组
  3. var result = [];
  4. //遍历原数组
  5. for (var i = 0; i < arr.length; i++) {
  6. //判断遍历到的这项是否在结果数组中,如果不存在就推入
  7. //includes方法用来判断某项是否在数组中
  8. if (!result.includes(arr[i])) {
  9. result.push(arr[i]);
  10. console.log(result);
  11. }
  12. }
  13. console.log(result);

随机样本

image.png

  1. var arr = [1, 24, 56, 7, 78, 85, 7, 765, 7];
  2. //结果数组
  3. var result = [];
  4. //遍历原数组
  5. for (var i = 0; i < 3; i++) {
  6. //随机选择一项的下标,数组的下标0~arr.length-1
  7. //之前学习过一个random的公式,[a,b]区间的随机数是parseInt(Math.random()*)
  8. var n=parseInt(Math.random()*arr.length)
  9. //把这项推入结果数组
  10. result.push(arr[n]);
  11. //删除这项,防止重复被随机到
  12. arr.splice(n,1);
  13. }
  14. console.log(result);

3)冒泡排序

image.png
image.png
image.png
image.png
image.png

  1. //冒泡排序
  2. var arr = [2, 35, 5, 5, 45,];
  3. //一趟一趟比较,趟数字序号就是i
  4. for (var i = 1; i < arr.length; i++) {
  5. //内层循环负责两两比较
  6. for (var j = arr.length - 1; j >= i; j--) {
  7. //判断项的大小
  8. if (arr[j] < arr[j - 1]) {
  9. //这一项比前一项小了,那么就要交换两个变量的位置
  10. var temp = arr[j];
  11. arr[j] = arr[j - 1];
  12. arr[j - 1] = temp;
  13. }
  14. }
  15. }
  16. console.log(arr)

4)二维数组

image.png

  1. var matrix = [
  2. [11, 33, 44],
  3. [34, 24, 7],
  4. [2, 45, 4]
  5. ];
  6. console.log(matrix.length);//4
  7. for(var i=0;i<matrix.length;i++){
  8. for(var j=0;j<3;j++){
  9. console.log(matrix[i][j])
  10. }
  11. }

认识引用类型

什么是引用类型

从一个题目开始讲起

image.png

基本类型和引用类型

基本类型:number、boolean、string、undefined、null
引用类型:array、object、function、.regexp.…

内存和硬盘

image.png

基本类型值变量传值的内存变化

image.png

引用类型值变量传值的内存变化

image.png

相等判断时的区别

image.png

总结一下

image.png

深克隆和浅克隆

image.png

  1. var arr1 = [1, 2, 3, 4, 5];
  2. //结果数组
  3. var result = [];
  4. //遍历数组中的每一项,把遍历到的项推入到结果数组中
  5. for (var i = 0; i < arr1.length; i++) {
  6. result.push(arr1[i]);
  7. }
  8. console.log(result);
  9. console.log(result == arr1);//期望false,因为引用类型值进行比较的时候,等等比较的是内存地址

image.png

  1. var arr1 = [1, 2, 3, 4, [1,2,3]];
  2. //结果数组
  3. var result = [];
  4. //遍历数组中的每一项,把遍历到的项推入到结果数组中
  5. for (var i = 0; i < arr1.length; i++) {
  6. result.push(arr1[i]);
  7. }
  8. console.log(result);
  9. console.log(result == arr1);//期望false,因为引用类型值进行比较的时候,等等比较的是内存地址
  10. console.log(result[5]==arr1[5]);//藕断丝连

image.png