整体介绍

数组的定义和基本使用 1)数组简介和定义 2)数组类型的检测 数组的常用方法 1)数组的常用方法1 2)数组的常用方法2 3)数组的常用方法3 数组算法 1)遍历相关算法 2)数组去重和随机样本 3)冒泡排序 4)二维数组 认识引用类型 1)什么是引用类型 2)深克隆和浅克隆

数组简介和定义

数组(Array),顾名思义,用来存储一组相关的值,从而方便进行求和、计算平均数、逐项遍历等操作。 var scoreArr=[96,97,76,87,87,98,91,100,78,56]; 每种高级编程语言中都有数组,它是非常重要的一种数据结构

数组定义方法1

定义一个数组非常的简单,只需要使用方括号[]即可

数组定义方法2

数组定义方法3

下面的代码表示定义一个长度为4的数组,但是这4项都是undefined var arr = new Array(4);

访问数组项

数组每一项都有下标,下标从0开始

可以使用方括号中书写下标的形式,访问数组的任一项

下标越界

JavaScript规定,访问数组中不存在的项会返回undefined,不会报错

数组的长度

数组的length.属性表示它的长度 var arr=['A','B','C','D']; console.log(arr.length);//4

更改数组项

数组并不是只读的,我们可以修改它其中任何项的值

var arr=[2,6,7,3];
arr[1]++;
arr[2] = 0;
console.log(arr);//[2,7,0,3]

如果更改的数组项超过了length-1,则会创造这项

chart

数组遍历

<body>
  <script>
    var arr = [34,3245,345,234,,,,345,67,45,345,324,,,];
    for (var i = 0;i < arr.length; i++){
      console.log(arr[i]);
    }
  </script>
</body>

中间4个逗号处输出3个undefined

末尾三个逗号输出2个undefined ,最后一个逗号会自动忽略

数组类型的检测

数组用typeof检测结果是object

Array.isArray()方法可以用来检测数组 IE6 7不兼容 在后面课程中,还将介绍使用“鸭式辨型”检测方法

数组的常用方法

数组的常用方法1

数组的头尾操作

数组的头尾操作方法

push()方法

push()方法用来在数组末尾推入新项,参数就是要推入的项 如果要推入多项,可以用逗号隔开 调用push()方法后,数组会立即改变,不需要赋值

arr = arr.push(66); ❌ arr = arr.push(77,88,99);❌

pop()方法

与push()相反,pop()方法用来删除数组中的最后一项 pop()方法不仅会删除数组末项,而且会返回被删除的项

var arr=[22,33,44,55];
var item  = arr.pop();
console.log(arr); //22,33,44
console.log(item);//55

unshift()方法

unshift()方法用来在数组头尾插入新项,参数就是要插入的项 如果要插入多项,可以用逗号隔开 调用unshift()方法后,数组会立即改变,不需要赋值

shift()方法

与unshift()相反,shift()方法用来删除数组中下标为0的项 shft()方法不仅会删除数组首项,而且会返回被删除的项

数组的常用方法2

splice()方法

splice()方法用于替换数组中的指定项

splice()方法可以用于在指定位置插入新项

splice()方法可以用于删除指定项

slice()方法

slice()方法用于得到子数组,类似于字符串的slice()方法 slice(a,b)截取的子数组从下标为a的项开始,到下标为b(但不包括下标为b的项)结束 slice(a,b)方法不会更改原有数组 slice()如果不提供第二个参数,则表示从指定项开始,提取所有后续所有项作为子数组 s1ice()方法的参数允许为负数,表示数组的倒数第几项

数组的常用方法3

join()和split()方法

数组的join()方法可以使数组转为字符串;字符串的split()方法可以使字符串转为数组。

join()的参数表示以什么字符作为连接符,如果留空则默认以逗号分隔,如同调用toString()方法

split()的参数表示以什么字符拆分字符串,一般不能留空

字符串和数组更多相关性

字符串也可以使用方括号内写下标的形式,访问某个字符等价于charAt()方法

concat()方法

concat()方法可以合并连结多个数组 concat()方法不会改变原数组

reverse()方法

reverse()方法用来将一个数组中的全部项顺序置反,会立即改变原来数组

改变字符串顺序: 别弄混数组与字符串的方法

indexOf()和includes()方法

indexof()方法的功能是搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回-1 includes()方法的功能是判断一个数组是否包含一个指定的值,返回布尔值

注意:这两个方法都是使用”==“判断

什么是引用类型

基本类型和引用类型

◆基本类型:number、boolean、string、undefined、null

◆引用类型:array、object、function、regexp…

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

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

相等判断时的区别

◆基本类型进行相等判断时,会比较值是否相等 ◆引用类型进行相等判断时,会比较址是否相等,也就是说它会比较是否为内存中的同一个东西

总结

深克隆和浅克隆

◆使用arr1=arr2的语法不会克隆数组 浅克隆:只克隆数组的第一层,如果是多维数组,或者数组中的项是其他引用类型值,则不克隆其他层

深克隆:克隆数组的所有层,要使用递归技术,在后面课程介绍

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