JavaScript数组

目录

六、数组

1.数组的概念

2.数组的创建

2.1 JS创建数组的方式

2.2 利用new创建数组

2.3 利用数组字面量创建数组

3. 获取数组中的元素

3.1 数组的索引

3.2 向数组中添加元素

3.3 删除数组元素

3.4 修改数组元素

3.5 查看数组元素

4. 获取数组长度(元素个数)

5. 遍历数组 

6. 检测数据类型的方法

6.1 为什么说数组是引用类型?

6.2 检测引用类型

6.3 深拷贝和浅拷贝

 7. 冒泡排序

 8. 二维或多维数组


六、数组

1.数组的概念

  • 数组是指一组数据的集合,其中的每个数据被称为元素,在数组中可以存放任意类型的元素
  • 数组是一种将一组数据存储在单个变量名下的存储方式
  • 数组属于引用类型
    //普通变量一次只能存储一个值
    var num=10;
    //数组一次可以存储多个值
    var arr=[1,2,3,4,5];

 2.数组的创建

2.1 JS创建数组的方式

  1. 利用new创建数组
  2. 利用数组字面量创建数组

 2.2 利用new创建数组

var 数组名=new Array();
var arr=new Array();  //创建一个新的空数组

2.3 利用数组字面量创建数组

//1.使用数组字面量方式创建空的数组
var 数组名=[];
//2.使用数组字面量方式创建带初始值的数组
var 数组名=['小白','小陈','小王','小张'];
  1.  数组名的字面量是方括号
  2. 声明数组并赋值称为数组的初始化
  3. 这种字面量方式是使用最多的方式

3. 获取数组中的元素

3.1 数组的索引

var arr=['小白','小陈','小王','小张'];
//索引号    0      1     2      3
//数组元素arr[0] arr[1] arr[2] arr[3]
  • 索引(下标)是用来访问数组元素的序号
  • 索引号从0开始,可以不按顺序存

 3.2 向数组中添加元素

  • 数组可以通过索引来访问、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的元素。
  1. 通过修改length长度新增数组元素
    //可以通过修改length的长度来实现数组扩容的目的
    //length属性是可读写的
    var arr=[11,22,33,44];
    arr.length=5;
    arr[4]=55;
    console.log(arr); //[11,22,33,44,55]
  2. 通过修改数组索引新增数组元素
    //可以通过修改数组索引的方式追加数组元素
    //不能直接给数组名赋值,否则会覆盖掉以前的数据
    var arr=[1,2,3,4];
    arr[4]=100;
    console.log(arr); //[1,2,3,4,100]
  3. 如何实现永远在数组的末尾添加元素:arr[arr.length]=末尾元素;
    var arr1=[1,2,3,4];
    arr1[arr1.length]=5;
    console.log(arr1); //[1,2,3,4,5]

 3.3 删除数组元素

  1. delete arr[索引号]   只能清空元素,数据长度不变(一般不用)
  2. 使用arr.length修改数组长度,但只能从末尾删除元素。

3.4 修改数组元素

arr[索引号]=新值;  以最后一次存的为准

var arr=[1,2,3];
arr[2]=4;
console.log(arr); //[1,2,4]

3.5 查看数组元素

var ele=arr[索引号];

console.log(ele);

  1. 若该位置没有存数,取出来是undefined
  2. 使用for...in遍历,没有存数的位置,直接不输出;
    var arr=['a','b','c',,'e'];
    console.log(arr[1]); //b
    console.log(arr[3]); //undefined

4. 获取数组长度(元素个数)

使用“数组名.length ”可以访问数组元素的数量(数组长度)

  • 因为索引号是从0开始的,所以数组中最大的索引号,永远比arr.length长度小1;
  • 当数组中元素个数发生了变化,这个length属性也跟着变化;
  • 常用于遍历数组中的所有项---数组名.length;
    var arr=[1,2,3,4];
    console.log(arr.length); //4

5. 遍历数组 

遍历:就是把数组中的每个元素从头到尾都访问一次。

循环方式案例区别
for循环

for(var i=0;i<arr.length;i++){

        console.log(i); //索引号

        console.log(arr[i]); //数组中的元素

}

  1. for循环给循环变量赋值为数字类型
  2. 它可以控制循环哪些元素,更灵活
for...in循环

for(var k in arr){

        console.log(k); //索引号

        console.log(arr[k]); //数组中的元素

}

  1. for...in循环给循环变量赋值为字符串类型
  2. 他必须把所有的元素循环一遍

6. 检测数据类型的方法

6.1 为什么说数组是引用类型?

  • 栈内存:存的是引用地址
  • 堆内存:存的是数据(也会有地址编号)
  • 引用地址:和堆中的地址编号一致,通过一条引线关联起来。(arr=null相等于引线被剪断了)

6.2 检测引用类型

使用运算符 instanceof来检测数组的引用类型

数组名  instanceof  Array

返回值是true和false

var arr=[];
console.log(arr instanceof Array); //true

var arr1='';
console.log(arr1 instanceof Array); //false

 6.3 深拷贝和浅拷贝

  1. 浅拷贝:指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
    var arr=[10,20,30];
    var newarr=arr;
    arr[0]='good'; //修改一个数组中的元素
    console.log(arr,newarr); //['good',20,30]  ['good',20,30]
    //两个数组中数据同步修改
浅拷贝:新建的一个数组,把原数组直接赋值给新数组,拷贝的引用地址,指向的是同一块内存中数据,其中一个数组中的数据被修改,另一个数组同步修改。

      2.深拷贝:重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。

var arr=[10,20,30];
var newarr=[];
for(var i=0;i<arr.length;i++){
    newarr[newarr.length]=arr[i];
}
console.log(newarr); //[10,20,30]
newarr[newarr.length]='end';
console.log(newarr); //[10,20,30,'end']
console.log(arr); //[10,20,30]

深拷贝:新建的一个数组,把原数组遍历一下,通过递归方式,把原数组中的元素复制一份到新数组,修改原数组或新数组,两个数组的值不会同步修改,两个数组之间没有关系。

深拷贝

  1. 修改原数组或新数组,两个数组的值会同步修改
  2. 浅拷贝修改了值,不会新建一个内存地址的对象
浅拷贝
  1. 修改原数组或新数组,两个数组的值不会同步修改
  2. 深拷贝如果修改了值,及时复制了一份新的内存地址,原始地址的值不会被改变

 7. 冒泡排序

  • 冒泡排序:是一种算法,把一系列的数据按照一定的顺序进行排列显示(从小到大或从大到小)。

  • 原理:在冒泡排序的过程中,按照从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,较小或较大的元素前移(交换数据)

  • 思路:双重循环
    外层循环比较的轮数 arr.length-1
    内层循环相邻两个数比较的次数 arr.length-1-i
    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);//[1,2,3,4,5]

8. 二维或多维数组

var arr=[ [],[],[] ]; 二维数组

var arr=[ [ [],[] ],[] ]; 多维数组

//对二维数组求和
var arr=[[10,20],[50,60],[70,80]];
var sum=0;
for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr[i].length;j++){
        sum+=arr[i][j];
    }
}
console.log(sum);
  • 31
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值