数组

演讲者:交互开发课题组

内容提纲

  1. 数组概述
  2. 创建数组
  3. 操作数组
  4. 案例练习

数组概述

  • JS数组是无类型的,数组元素可以是任意类型,并且同一数组中的不同元素也可是不同类型
  • JS数组的元素也可以是对象或其他数组
  • JS数组的索引值可以不连续(稀疏数组)

创建数组

  • 数组直接量创建数组
  • 构造函数创建数组
<script type="text/javascript">
    //使用数组直接量创建数组
    var aEmpty = [];
    var aPrimes = [2,3,5,7,11];
    var aMisc=[1.1, true, "a",];
    console.log(aMisc.length);
    //构造函数创建数组
    //没有参数时,将创建一个空数组,等同于直接量[]
    var aTemp=new Array();  
    //一个参数时,指定长度
    //该参数只能是正整数
    var aLength=new Array(10);
    //多个参数时,设置数组元素
    var aSeveral=new Array(5,4,3,2,1,"hello world",[1,2,3]);
    console.log(aSeveral[6][0]);
</script>

元素读写

  • []操作符访问元素
<script type="text/javascript">
    //读写元素
    //[]操作符访问元素,[]里可以是返回非负整数值的任意表达式
    var a=aPrimes[1];
    var b=aPrimes[a++];
    var c=aPrimes['1'];
    //写元素,任意非负正整数表达式
    aPrimes[2]=5;
    aPrimes[3+1]=10;
    //如果使用负数或非整数来索引数组,数值会转换为字符串,作为属性名来使用
    aPrimes[-2]=11;
    aPrimes["abc"]=12;
    console.log(aPrimes,aPrimes.length,aPrimes.abc);
</script>

操作数组

  • 元素的添加和删除
  • 数组的遍历
  • 多维数组
  • 数组方法

元素的添加

  • 为新索引复制添加元素
  • push方法数组末尾添加元素
  • unshift方法在数组首部添加元素

元素的删除

  • length属性赋短值删除元素
  • pop方法数组末尾删除元素
  • shift方法在数组首部删除元素
<script type="text/javascript">
    //数组元素的添加和删除
    //元素的添加
    var aZero=[];
    //为新索引复制添加元素
    aZero[0]=2;
    //push方法数组末尾添加元素
    aZero.push("zero");
    //unshift方法在数组首部添加元素
    aZero.unshift("new");
    aZero.length=4;
    console.log(aZero,aZero.length);
    //元素的删除
    //length属性赋短值删除元素
    aZero.length=3;
    console.log(aZero);
    //pop方法数组末尾添加元素
    aZero.pop();
    console.log(aZero);
    //shift方法在数组首部添加元素
    aZero.shift();
    console.log(aZero);
</script>

数组的遍历

  • for循环遍历
<script type="text/javascript">
     //数组遍历
    var aNumber=[1,2,3,4,5,6,7,8];
    //for循环遍历
    for (var i = 0; i < aNumber.length; i++) {
        console.log(aNumber[i]);
    }
    //如果是稠密数组,需要跳过null、undefined和不存在的元素
    aNumber[3]=undefined;
    delete(aNumber[5]);
    for (var i = 0; i < aNumber.length; i++) {
        if(!aNumber[i]) continue;
        console.log(aNumber[i]);
    }
    //如果是稀疏数组,可以使用for in循环
    var aName=[];
    aName[0]="jack";
    aName[3]="tom";
    for(var a in aName){
        console.log(aName[a]);
    }
    //for in 循环会枚举继承的属性名
    //因此,除非使用额外的检测方法来来过滤属性,一般不使用for in来遍历数组
    for(var i in aName){
        //if(!aName.hasOwnProperty(i)) continue;  //跳过继承的属性
        if((String(Math.abs(Number(i))))!==i) continue;  //跳过非负整数的i
        console.log(aName[i]);
    }
</script>

多维数组

  • JS不支持多维数组,只能用数组的数组来近似
  • 使用[][]操作符访问元素
<script type="text/javascript">
    //多维数组
    var table=new Array(10);
    for(var i=0;i<table.length;i++){
        table[i]=new Array(10);
        for(var j=0;j<table[i].length;j++){
            table[i][j]=i*j;
        }
    }
    var product=table[5][7];
    console.log(product);
</script>

数组方法

  • join 将数组中的所有元素转化为字符串并连接在一起
  • reverse 数组元素的颠倒顺序
  • sort 数组元素排序
  • concat 连接数组元素,并返回新数组
  • slice 截取数组
  • splice 插入、删除、替换数组元素
<script type="text/javascript">
    //数组操作
    //join 将数组中的所有元素转化为字符串并连接在一起
    var aNum=[1,2,3,4,5,6,7];
    console.log(aNum.join(),aNum.join('-'));
    //reverse 数组元素的颠倒顺序
    console.log(aNum.reverse());
    //sort 数组元素排序,默认是按照字典顺序排序
    aNum[4]=8;
    console.log("排序前:"+aNum);
    aNum.sort();
    console.log("排序后:"+aNum);
    aNum.sort(function(a,b){
        return b-a;
    });
    console.log("自定义排序后:"+aNum);
    //concat 连接数组元素,并返回新数组    
    console.log(aNum.concat(9,10),aNum);
    //slice 从已有的数组中返回选定的元素
    console.log(aNum.slice(1,2)); // [7]
    console.log(aNum.slice(1));   // [7, 6, 5, 4, 2, 1]
    console.log(aNum.slice(-4));  // [5, 4, 2, 1]
    //splice 数组中添加/删除项目,然后返回被删除的项目

</script>

案例练习

抽奖

交互开发

旨为前端开发工程师的前端开发课程