数组及其数组的方法

数组

数组的概念

一个变量只能存储一个数据,如果我们有一组数据,比如1到100一百个数字,定义100个变量来存储就太痛苦了,这时候我们就需要数组来存储这样的数据。数组:存储一组数据.

数组的定义

数组为引用类型,创建时可通过构造方法创建。

堆和栈及索引思维

构造方法

1.无参构造函数,创建一空数组

var a1=new Array();

2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组

var a2=new Array(5);

3.带有初始化数据的构造函数,创建数组并初始化参数数据

var a3=new Array(4,'hello',2.34);

数组的定义
    1.构造方法
    new:在堆内开辟空间的关键词
    Array:数组数据类型
    
var arr=new Array(1,2,3,4,5,6);

字面量

4.使用方括号,创建空数组,等同于调用无参构造函数

var a4=[];

5.使用中括号,并传入初始化数据,等同于调用带有初始化数据的构造函数

var a5=[10];

var arr=[1,2,3,4,5,6,7,8,9]; 最常用的

数据类型分类

内置基本类型:
    Number
    String
    Boolean
    undefined
    null

    
引用类型:
    object
    
内置类型与引用类型的区别:
    内置类型:只有一块空间,在栈区,该空间直接保存着变量的数值
    
引用类型:
    有两块空间,一块栈空间,存储new出来堆空间的地址,
    另一块堆空间,存储真正的数值

数组元素的访问

数组名[下标];
    下标:索引,从零开始连续的自然数,基于0;
    下标也可以是变量
    数组下标的取值范围0~元素个数-1;
    数组的长度:length
    
​
注意事项:
    数组的下标不能越界访问
    超出范围出现undefined,不报错,
    
数组的长度
    length
    console.log(arr.length);
    
数组的遍历

    var arr=[7,8,9,6,5,0,1,2,3];
    for(var i=0;i<arr.length;i++){
        document.write(arr[i]+" ");
    }
        
数组的逆序:
    思想:相当于第一个和最后一个交换,第二个和倒数第二个交换,交换的次数为数组元素个数的一半
    交换需要中间变量
    程序=算法+语法
    算法:先用中文描述出来问题解决的步骤,然后再翻译为JS语言
  
  var t=0;//定义中间变量
    var arr=[7,8,9,6,5,1,2,3];
    for(var i=0;i<arr.length/2;i++){
        t=arr[i];
        arr[i]=arr[arr.length-1-i];
        arr[arr.length-1-i]=t;
    }
    document.write(arr+" ");
    
    分析:7和3交换
    规律:arr4[0]和arr4[arr4.length-1-0]交换
    以此类推

数组的相关函数

函数需要注意的几个点:功能 ,参数 ,返回值
​
eg:
封装闰年问题
 
   function getRn(x){
        if(x%4==0&&x%100!=0 ||x%400==0){
            return true;
        }else{
            return false;
        }
    }
    if(getRn(2008)==true){
        console.log('闰年');
    }else{
        console.log('平年');
    }
  • push尾插 (尾插有参返新长)

     功能:末尾插入一个或多个元素
     参数:push(x1,[x2,x3])必须要有一个参数,方括号里面表示可选的参数,可有可没有.
      返回值:返回尾插后新数组的长度
   var arr=[1,2,3];
    var len=arr.push(4,5,6);
    console.log(len);//6
    console.log(arr);//[1,2,3,4,5,6]
  • pop尾删

pop:尾删
    参数:无
    返回值:返回被删掉的元素
    
  var arr=[4,5,7,8,5,1,2,3];
    var x=arr.pop();
    console.log(x,arr);//3,[4,5,7,8,5,1,2]
  • unshift头插 (头插有参返新长)

    unshift:头插
        功能:头部插入一个或若个元素
        参数:unshift(x1,[x2,x3])
        返回值:返回头插后新数组的长度
    
      var arr=[1,2,3];
        var x=arr.unshift(4,5,6);
        console.log(x,arr);//6,[4,5,6,1,2,3]
        

  • shift 头删

    shift:头删
        功能:删除第一个元素
        参数:无参
        返回值:返回被删除的元素
        
    
        var arr=[1,2,3];
        var x=arr.shift();
        console.log(x,arr);//1,[2,3]
        

  • reverse 逆序

    reverse 
        功能:逆序
        参数:无
        返回值:无
        直接改变原数组对象
        
    
       var arr=[1,2,3,4,5,6];
        arr.reverse();
        console.log(arr);//[6,5,4,3,2,1]

  • splice 删除指定元素且用新的元素代替

    功能:删除指定元素且用新的元素代替
        参数:splice(起始位置,偏移量,[替换的元素]);
        返回值:被删除的元素(其实就是一个数组)
        注意:起始位置:看的下标,偏移量从下标开始算
    
        var arr=[1,2,3,4,5,6];
        var arr1=arr.splice(2,3,7,8,9);
        console.log(arr,arr1);//[1,2,7,8,9,6][3,4,5]
    • concat:拼接数组

      功能:拼接数组
          参数:concat(数组)
          返回值:被拼接的新数组
      
        var arr1=[7,8,9,5,4];
          var arr2=[1,2,3,6];
          var arr3=arr1.concat(arr2);
          console.log(arr3);//[7,8,9,5,4,1,2,3,6]

    • join 将数组转换为字符串

    功能:将数组转换为字符串
        参数:([字符串分隔符]),默认分隔符为逗号
        返回值:被分隔的字符串
       
     
        var arr=[1,2,3,4,5,6];
        var arr1=arr.join('*');
        console.log(arr1);// 1*2*3*4*5*6
    ​

  • slice 数组元素的截取

    slice
        功能:数组元素的截取
        参数:slice(起始位置,结束位置);[左闭右开)
        返回值:返回被截取的数组
    
        var arr=[1,2,3,4,5,6];
        var arr1=arr.slice(2,5);
        console.log(arr1);// [3,4,5]返回被截取的数组
    • sort(了解)

      var arr=[7,8,9,5,1,2,3];
          arr.sort();
          console.log(arr);// [1, 2, 3, 5, 7, 8, 9]按照字符串的大小排序,内部Ascall码值比较 
          
      从小到大    
          
    • 多维数组

      多维数组
          js中多维数组是模拟一维数组的
           多维数组实际是一维数组的嵌套

      var arr=[ ​ [1,2,3],//arr[0]第一个元素 ​ [4,5],//arr[1]第二个元素 ​ [7,8,9]//arr[2]第三个元素 ​ ] ​ //二维数组的遍历 ​ ​ for(var i=0;i<arr.length;i++){ ​ for(var j=0;j<arr[i].length;j++){ ​ document.write(arri+" "); ​ } ​ document.write(" ") ​ }

       // 冒泡排序:两两比较,每趟找出最大或者最小的一个数值
              // 趟数:N-1
              // 次数:N-1-i
              
               var arr=[5,6,7,4,8,3,9,2,0,1];
               var t;
               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]){
                  t=arr[j];
                          arr[j]=arr[j+1];
                      arr[j+1]=t;//实现交换
                      }
                  }
               }
               console.log(arr);
      ​
      ​
              
              /*
                      5,6,7,4,8,3,9,2,0,1 初始数据 
                      
                      模拟第0趟比较  交换9次
                      5,6,7,4,8,3,9,2,0,1
                      5,6,7,4,8,3,9,2,0,1
                      5,6,4,7,8,3,9,2,0,1
                      5,6,4,7,8,3,9,2,0,1
                      5,6,4,7,3,8,9,2,0,1
                      5,6,4,7,3,8,9,2,0,1
                      5,6,4,7,3,8,2,9,0,1
                      5,6,4,7,3,8,2,0,9,1
                      5,6,4,7,3,8,2,0,1,              9   
                      
                      第1趟交换  交换8次
                      
              */
       选择排序
      ​
      
      
       var arr=[7,8,6,2,10,3];
          // 核心:外层循环N-1次
          // 内层:循环N-1-i次
      ​
          // 思路:i控制指定位置
          // k控制目标位置
          // k=i;用k来查找目标位置
          // 最后交换arr[k]和arr[i];
          // 每趟交换一次,找到最大(最小)的数,然后放到目标位置,进行下标交换;
      ​
           var t,k;
          for(var i=0;i<arr.length-1;i++){//趟数
              k=i;  //控制目标位置
              for(var j=i+1;j<arr.length;j++){//次数
          if(arr[k]>arr[j]){
          k=j;  //下标交换,相当于找到目标位置,与指定位置交换下标
              }
             }t=arr[i];
              arr[i]=arr[k];
              arr[k]=t;
           }console.log(arr);
      ​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值