javascript数组

一、数组的基础


1.基础概念


     什么是数组:在一个内存(变量名)中保存了多个数据的一个集合结构

2.创建


    1.直接量:var arr=[值1,...];
     2.构造函数:var arr=new Array(值1,...);
           特殊:new Array(只放了一个数字num) - 创建长度为num的一个空数组,相当于设置length

3.访问:数组名[下标]--元素


     添加:数组名[下标]=新值;
      特殊:读取元素,下标越界,返回undefined
                 添加元素,下标越界,下标不再连续导致数组变成一个稀疏数组

4.三不限制


     1.不限制元素的个数
     2.不限制元素的类型
     3.不限制下标越界(但是不建议)

5.数组名.length:可以获取数组的长度(长度==最大下标+1)


      三个固定套路:
          1.末尾添加元素:arr[arr.length]=新值;
          2.获取倒数第n个:arr[arr.length-n];
          3.缩容:删除元素:从末尾删除元素:arr.length-=n;

6.遍历数组:将数组中的每个元素都取出来执行相同或者相似的操作


        for(var i=0;i<arr.length;i++){arr[i]//当前次元素}

7. 索引数组:下标都是由数字组成的数组

8.关联数组 - 也称之为hash数组


      什么是:下标是可以自定义的
      为什么:索引数组的下标无具体意义,不便于查找
      如何使用:
    1、先创建一个空数组
        var arr=[];
    
    2、为数组添加下标添加元素
        arr["自定义下标"]=新值

    3、访问元素非常简单,不需要数下标,只需要直接写入下标:
        arr["自定义下标"];

    4、强调:hash数组的length永远失效!永远为0!

    遍历hash数组:必须使用for in循环遍历 - for in是专为遍历准备的
        公式:for(var 下标名 in 数组名){
                数组名[下标名];
                 }
        for in :既可以遍历索引数组 也可以 遍历 hash数组

二、数组的API


1.arr 转 string:


       var str=arr.join("连接符");
    可以自定义连接符,也可以省略不写等效于String(arr);
   固定套路
      1.如何将数组里面的内容拼接为一个句话(无缝拼接) 
            语法:  var str=arr.join("");
       2、将数组拼接为页面元素
               //数据
    var cities=["-请选择-","北京","南京","重庆","天津","上海"];
    //数组的API join拼接上了标签
    var str="<option>"+cities.join("</option><option>")+"</option>";
    //渲染到页面元素之上
    sel.innerHTML=str;

    实现:二级联动:
    关键要点:1、两个数组:一个普通数组做一级,一个二维做二级
         2、select专属事件onchange
         3、事件中:this.selectedIndex - 获取到当前选中项的下标

2、拼接数组:添加数组元素的新方式:将concat后面的参数,拼接到arr之后


    var newArr=arr.concat(值1,...);
    强调:1、concat不修改原数组,只能返回一个新数组
          2、concat可以直接传入数组参数,悄悄的把数组打散为单个元素

3、截取(获取)子数组:将arr从starti位置开始,一直截取到endi - 删除元素的新方式/复制


    var subArr=arr.slice(starti,endi+1);
    强调:1、slice不修改原数组,只能返回一个新数组
          2、含头不含尾
          3、endi可以省略,截取到末尾
          4、两个参数都可以省略,从头到尾复制一份 - 深拷贝(复制了一个副本)

4、arr.splice():删除/添加/替换的新方式


    删除:var dels=arr.splice(starti,n); n - 删除个数 
          强调:其实此方法也有返回值,返回的是你删除的元素组成的一个新数组

    添加:arr.splice(starti,0,值1,...);
          强调:1、原starti位置的元素以及后续元素都会向后移动
         2、插入数组也行,但是不推荐,因为不会帮我们打散数组,会导致一些部分是一维,一些部分是二维

    替换:var dels=arr.splice(starti,n,值1,...);
          强调:删除的个数不必等于插入的个数

5、翻转数组:arr.reverse();

6.排序:arr.sort();


       问题1:默认会将元素们转为字符串,按位PK,希望按照数字排序?
     解决:固定套路:
        arr.sort(function(a,b){//悄悄的带有循环
            console.log(a);//a是后一个数
            console.log(b);//b是前一个数
            return a-b;//如果return 返回的是一个正数,说明后一个数>前一个数
                   //如果return 返回的是一个负数,说明后一个数<前一个数
                             //如果return 返回的是0,两者一样大
                 //而我们的sort方法正好可以根据你返回的正数/负数/0来进行排序
            })

          问题2:只能升序排列,如何降序:
    解决:arr.sort(function(a,b){return b-a;})


7.栈和队列:其实就是数组,添加元素和删除元素的新方式


    栈:数组,只不过是一端封闭,只能从另一端进出的操作
        开头进:arr.unshift(新元素,...);//添加元素的新方式,向前添加,缺陷:导致其余元素的下标发生变化
        开头出:var first=arr.shift();//只会一次调用删除第一个//删除元素的新方式,向前删除,缺陷:导致其余元素的下标发生变化

        结尾进:arr.push(新元素,...);//添加元素的新方式,向后添加
        结尾出:var last=arr.pop();//只会一次调用删除最后一个//删除元素的新方式,向后删除

    队列:数组,只不过是只能从一端进入,另一端出
       何时:按照先来后到的顺序
        依然是以上4个:
        开头进:arr.unshift(新元素,...);
        结尾出:var last=arr.pop();

        结尾进:arr.push(新元素,...);
        开头出:var first=arr.shift();

8.二维数组:数组的元素,又引用着另一个数组


      何时:在一个数组内,再次细分每个分类
      创建:
        var arr=[
            ["张三",18,1500],
            ["李四",18,2000],
            ["王麻子",35,12000]
        ];
    
      访问:arr[行下标][列下表];
     特殊:列下标越界,返回undefined
        行下标越界,报错!因为undefined没有资格使用[]

      遍历二维数组:必然两层循环,外层循环控制行,内存循环控制列
            for(var r=0;r<arr.length;r++){
                for(var c=0;c<arr[r].length;c++){
                    console.log(arr[r][c]);
                }
            }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值