JavaScript数组

目录

1.数组的概念

2.数组的创建 

2.1利用new创建数组

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

 2.3数组元素的类型

3.数组的基本操作

3.1数组的索引

 3.2数组的获取

3.3数组的增、删、改、查

3.4遍历数组

4.数组排序

5.检测数据类型

6.浅拷贝与深拷贝

7.典型案例


1.数组的概念

  • 数组对象是使用单独的变量名来存储一系列的值。
  • 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。
  • 数组是一种将一组数据存储在单个变量名下的存储方式。
  • 数组是引用数据类型,不是基本数据类型
  • 数组与普通变量的区别

    // 普通变量一次只能存储一个值

    var num = 10;

    // 数组一次可以存储多个值

    var arr = [1,2,3,4,5];

2.数组的创建 

2.1利用new创建数组

//先声明再赋值

var  数组名  =  new  Array();

//声明的同时赋值
var arr2=new Array(值,值,值,...);//如果()里面只有一项数据,表示数组的长度

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

var arr1=new Array(10);//创建了一个数组长度为10的空数组

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

//1. 使用数组字面量方式创建空的数组(先声明再赋值)

var 数组名 = [];

//2. 使用数组字面量方式创建带初始值的数组(声明的同时赋值)

var 数组名 = ['小白','小黑','大黄','瑞奇'];

var arr=[];//创建一个空数组
var arr=[10];//创建一个里面有一个元素10的数组

 2.3数组元素的类型

 数组中可以存放任意类型的数据,例如字符串,数字,布尔值等

var arrStus = ['你好',12,true,28.9,undefined,'balala'];

3.数组的基本操作

3.1数组的索引

索引 (下标) :用来访问数组元素的序号(数组下标从 0 开始)。

var arr = ['小白','小黑','大黄','瑞奇'];

索引号         0       1        2       3

 3.2数组的获取

数组可以通过索引来访问(获取得到)、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的元素。

数组名 [索引号];

//定义数组
var arr=[1,2,3];
//获取指定元素
console.log(arr[1]);//2

3.3数组的增、删、改、查

  1. 增加数据

    arr[索引号]=值;

    1. 索引号从0开始
    2. 可以不按顺序存储,没有数据的地方为空(empty)
    3. 在元素末尾添加数据****

      arr[arr.length]=值;

      arr.length的值永远比数组的最大索引号大1 *****

  2. 修改数据

    arr[索引号]=新值;

    多次存储同一个索引号位置的数据会覆盖,以最后一次存储的为准

  3. 查看数据
    1. 单个数据

      arr[索引号];

      var  a=arr[索引号];
      console.log(a);

      有数据输出数据,没有数据输出undefined

    2. 所有数据——遍历数组
      1. for...in
      2. for循环
  4. 删除数据
    1. delete arr[索引号];(一般不用此方法)
      1. 只能清空元素内的数据,不能删除元素,数组长度不变
      2. 清除后输出元素,结果为undefined
    2. 内置方法
    3. 修改数组的长度

      arr.length=值;

      只能在数组的末尾增加或者删除元素

3.4遍历数组

  1. length
    1. 表示数据的长度(元素的个数)
    2. 索引号是从零开始的,长度表示数组中元素的个数
      因此,数组中的最大索引号永远比长度小1
    3. 解决在元素末尾添加数据   arr[arr.length]=值
  2. for循环
    for(var i=0;i<arr.length;i++){
        console.log(i);//索引号
       console.log(arr[i]);//数组中的元素
    }
  3. for...in   有内容可以取出,没有内容取不出
    for(var k in arr){
       console.log(k);//索引号
       console.log(arr[k]);//数组中的元素
    }

4.数组排序

冒泡排序(冒泡算法):数组中的数据从小到大或从大到小进行排序

  1. 基本思路:双重循环
    1. 外层循环:控制轮数    arr.length-1轮
    2. .内层循环  控制数据的比较次数 arr.length-当前轮数    相邻的元素比较大小,交换顺序

    3. 举例:把[5,4,3,2,1]从小到大排序

                      [5,4,3,2,1]     数组的长度  arr.length==5

              外大轮                                  1轮

              内层                                    4次

                      [4,5,3,2,1]

                      [4,3,5,2,1]

                      [4,3,2,5,1]

                      [4,3,2,1,5]

              外大轮                                  2轮

              内层                                    3次

                      [3,4,2,1,5]

                      [3,2,4,1,5]

                      [3,2,1,4,5]

              外大轮                                  3轮

              内层                                    2次

                      [2,3,1,4,5]

                      [2,1,3,4,5]

              外大轮                                  4轮

              内层                                    1次

                      [1,2,3,4,5]  

    4. 代码实现 
      var arr=[5,4,3,2,1];
      for(var i=1;i<=arr.length-1;i++){
          for(var j=0;j<arr.length-i;j++){
              if(arr[j]>arr[j+1]){
                  var temp;
                  temp=arr[j];
                  arr[j]=arr[j+1];
                  arr[j+1]=temp;
              }
          }
      }
      console.log(arr);

5.检测数据类型

引用数据类型的检测用 instanceof

数组名 instanceof Array  返回值是true false

栈内存中存储引用地址,堆内存中存储数据。栈内存与堆内存存储的有对应的地址编号,有一根线把数据关联起来

6.浅拷贝与深拷贝

浅拷贝——把原数组直接赋值给新数组

  • 拷贝的是引用地址,指向的是同一块数据
  • 其中一个数组中的数据被修改,另一个数组被同步修改

 var arr=[10,20];

 var arr1=arr;

深拷贝

  • 新建一个数组,通过遍历数组,把原数组中的元素复制到新数组
  • 其中一个数组中的数据被修改,另外一个数组中的数据不会被修改,两个数组没有关系。

    var arr=[10,15,'hello',true,56];
    var newarr=[];
    for(var i=0;i<arr.length;i++){
        newarr[newarr.length]=arr[i];
    }
    console.log(arr);
    console.log(newarr);
    

7.典型案例

  1. 录入班级成绩,当遇到‘exit’时结束录入,输出最高分和最低分

    
    var arr=[];
    while(true){
        var score=prompt('请输入学生成绩');
        if(score=='exit'){
            break;
        }
        arr[arr.length]=+score;
    }
    for(var i=1;i<=arr.length-1;i++){
        for(var j=0;j<arr.length-i;j++){
            if(arr[j]>arr[j+1]){
                var temp;
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    console.log(arr[0],arr[arr.length-1]);
  2. 查找数组元素第一次出现的位置,如果存在返回位置,不存在返回-1

    var arr=[1,45,0,89,4,0,12];
    var flag=1;
    for(var i=0;i<arr.length;i++){
        if(arr[i]==0){
            console.log(i);
            flag=0;
            break;
        }
    }
    if(flag==1){
    console.log(-1);
    }
  • 37
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值