js入门(5)数组

数组

数组的定义和基本使用

数组的定义和相关信息

数组相关

  • 用来存储一组相关的值
  • 命名通常以Arr为后缀
  • 他是非常重要的一种数据结构

数组定义

  • 第一种
    var arr =['A','B','C','D'];
  • 第二种
    var arr = new Array('A','B','C','D');
    这种相当于调用函数,所以用小括号即可
  • 第三种
    var arr = new Array(4);
    定义了一个长度为4的空数组
  • 数组每项都有下标
    第一项是0

下标越界

  • 会返回undefined,不会报错
  • arr[-1]这里是错误的,但是js不会报错

数组的长度

  • length
    用arr.length可以输出长度

更改数组项

  • 如果更改的数组项超过了长度,会创造这一项

数组的遍历

  • 数组最大的优点就是遍历

数组类型的检测

  • 用typeof检测数组得到的结果是object
  • 我们可以用内置构造函数Array.isArray()方法来进行检测,会返回布尔值

数组的常用方法

数组的头尾操作

push()方法

  • 在数组的末尾推入新项
  • 要推入多项,可以用逗号分隔
  • 调用push()方法后,数组会立即改变,不需要赋值

pop()方法

  • 用来删除数组的最后一项
  • 会返回被删除的项
  • 无参数
  • 输出55

unshift()方法

  • 在数组头部插入新项
  • 插入多项用逗号隔开
  • 数组会立即改变不需要赋值

shift()方法

  • 用来删除数组中下标为0 的数
  • 会返回被删除的项

splice()方法

  • 用于替换数组中的指定项
  • 从下标为3开始的项开始2项,替换的项用逗号写在后面,可以超过2项

在指定位置插入新项

  • 在下标为2之前插入这些新项

删除指定项

  • arr.splice(2,3)
  • 从下标为2的项开始删除3项,后面不跟新项即可

被删除的项会返回

  • 被删除或者是被替换
  • 有返回值

slice()方法

  • 用于的得到子数组
  • slice(a,b)截取的子数组从下标为a的项开始,到下标为b(不包括b)结束
  • 不会改变原数组
  • 没有b会截取到最后
  • 参数可以为负数,表示倒数第几项

    截取到倒数第一项但是不包括最后一项

join()和split()方法

  • 数组的join()方法可以使数组转为字符串
  • 字符串的split()方法可以使字符串转为数组
  • join()的参数表示以什么字符作为连接符,如果留空则默认以逗号分隔,如同调用toString()方法
  • split()的参数表示以什么字符拆分字符串,一般不能留空

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

concat()方法

  • 合并连接多个数组
  • 会生成一个新的数组,原数组不会被改变

reverse()方法

  • 用来将一个数组中的全部项顺序置反
  • 会立刻改变数组值
  • 把'ABCDEFG'全部调换顺序

    可以连续打点.

indexOf()和includes方法

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

数组的排序

sort()

数组算法

遍历相关算法

  1. 求数组中每一项的总和和平均数
  2. 求数组的最大值和最小值
<script>
    /*求数组的总和,平均值*/
    /*求最大值和最小值*/
    var Arr=[1,2,65,78,65,43,76,4,85,8,0,53,35];
    var sum=0;
    var max,min;
    max=Arr[0];
    min=Arr[0];
    for (var i=0;i<Arr.length;i++){
        sum +=Arr[i];
        if (max<Arr[i]){
            max=Arr[i];
        }else if(min>Arr[i]){
            min=Arr[i];
        }
    }
    alert(sum);
    var pj;
    pj=sum/(Arr.length-1);
</script>

数组去重和随机样本

  • 去掉数组中的重复项
    准备一个空数组,遍历原数组,如果遍历到的项不在结果数组中,则推入结果数组
 /*数组去重*/
    var qcArr=[1,1,1,2,2,2,3,3,4,4,4,4,5,6,7,7,8];
    /*创建一个新数组*/
    var newArr=[];
    /*通过includes()判断是否拥有这个元素
    * 通过push()方法在数组的末尾推入新项*/
    for (var i=0;i<qcArr.length;i++){
        if(!newArr.includes(qcArr[i])){
            newArr.push(qcArr[i]);
        }
  • 随机从原数组中取3项
    准备一个空数组,遍历原数组,随机选择一项,推入结果数组,并且将这项删除
    /*选择随机数*/
    var sjsArr=[1,2,3,45,6,7,8,9,0,-12];
    var new1Arr=[];
    for (var i=0;i<3;i++){
        /*随机一项的下标并删除*/
        var n=parseInt(Math.random(sjsArr.length));
        new1Arr.push(sjsArr[n]);
        /*删除这个随机数*/
        arr.splice(n,1);
    }

冒泡排序

从最后一个数字一个一个往前面比较
n个数字需要比较n-1趟,比较次数为n(n-1)/2次

    var mpArr=[1,2,3,45,6,7,8,9,0,-12];
    var number;
    /*需要比较长度-1项,因为是跟前一项来比较*/
    for (var i=1;i<mpArr.length;i++){
        for (var j=mpArr.length-1;j>=i;j--){
            /*建一个新变量用于交换两个数*/
            if (mpArr[j]<mpArr[j-1]){
                number=mpArr[j];
                mpArr[j]=mpArr[j-1];
                mpArr[j-1]=number;
            }
        }
    }

二维数组

  • 以数组作为数组元素的数组,就是二维数组
  • 可以看作是矩阵
  • 每一个[],就表示一行
  • 长度是行数,并不是全部
  • 遍历需要用for循环的嵌套来完成

认识引用类型

基本类型和引用类型

  • 基本类型:number ,boolean ,string ,undefined ,null
  • 引用类型:array ,object ,function ,regexp...
  • 基本类型会克隆值,引用类型则不会
  • 基本类型进行相等判断,会比较值
  • 引用类型会比较地址

深克隆和浅克隆

浅克隆:

只克隆数组的第一层,如果是多维数组,或者数组的项时其他引用类型的值,不克隆其他层

深克隆:

克隆数组所有层,需要用到递归

posted @   zongkm  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示