zoukankan      html  css  js  c++  java
  • JavaScript学习笔记-数组(1)

    数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素甚至也可能是对象或其他数组,这允许创建复杂的数据结构。

    1.创建数组

    使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。

    1 var empty=[]; //没有元素的数组
    2 var primes=[2,3,5,7,11]; //有5个数值的数组
    3 var misc=[1.1,true,"a",]; //3个不同类型的元素和结尾的逗号

    数组直接量中的值不一定要是常量;它们可以是任意的表达式:

    1 var base=1024;

    2 var table=[base,base+1,base+2,base+3]; 

    它可以包含对象直接量或其他数组直接量:

     1 var b=[[1,{x:1,y:2}],[2,{x:3,y:4}]]; 

    如果省略数组直接量中的某个值,省略的元素被赋予undefined值:

     1 var count=[1,,3]; //数组有3个元素,中间的那个元素值为undefined

     2 var undefs=[,,]; //数组有2个元素,都是undefined 

    数组直接量的语法允许有可选的结尾的逗号,故[,,]只有两个元素而非三个。

    关于调用构造函数Array()是创建数组的另一种方法。可以用三种方式调用构造函数。

      调用时没有参数:

          1 var a=new Array(); 

     该方法创建一个没有任何元素的空数组,等同于数组直接量[]。

      调用时有一个数值参数,它指定长度:

          1 var a=new Array(10); 

       显式指定两个或多个数组元素或者数组的一个非数值元素:

          1 var a=new Array(5,4,3,2,1,"test,test"); 

    2.数组元素的读和写

    使用[]操作符来访问数组中的一个元素。数组的引用位于方括号的左边。方括号中是一个返回非负整数值的任意表达式。使用该语法可以读又可以写数组的一个元素,因此,如下代码都是合法的JavaScript语法:

    1 var a=["world"]; //从一个元素的数组开始
    2 var value=a[0]; //读第0个元素
    3 a[1]=3.14; //写第1个元素
    4 i=2;
    5 a[i]=3; // 写第2个元素
    6 a[i+1]="hello"; //写第3个元素
    7 a[a[i]]=a[0];//读第0个和第2个元素,写第3个元素

    3.稀疏数组

    稀疏数组就是包含从0开始的不连续索引的数组。通常,数组的length属性只代表数组中元素的个数。如果数组是稀疏的,length属性值大于元素的个数。可以用Array()构造函数或简单的指定数组的索引值大于当前

    的数组长度来创建稀疏数组。

    1 a = new Array(5); //数组没有元素,但是a.length是5
    2 a =[]; //创建一个空数组,length=0
    3 a[1000] =0; //赋值添加一个元素,但是设置length为1001

     4.数组长度

    每个数组有一个length属性,就是这个属性使其区别于常规的JavaScript对象。length属性只代表数组中元素个数。其值比数组中最大的索引大1:

       1 [].length //=>0:数组没有元素

      2 {'a','b','c'}.length //=>3: 最大的索引为2,length为3  

     5.数组元素的添加和删除

     我们见过添加数组元素最简单的方法:为新索引赋值:

     1 a =[] //开始是一个空数组

     2 a[0]="zero";//然后向其添加元素

     3 a[1]="one"; 

    也可以使用push()方法在数组末尾增加一个或多个元素:

    1 a=[]; //开始是一个空数组
    2 a.push("zero") //在末尾添加一个元素 
    3 a.push("one","two") //再添加两个元素 

    可以删除对象属性一样使用delete运算符来删除数组元素: 

    1 a=[1,2,3];
    2 delete  a[1];  //a在索引1的位置不再有元素
    3 1 in  a           //=>false: 数组索引1并未在数组中定义
    4 a.length       //=>3:delete 操作并不影响数组长度

    7.数组遍历

    使用for 循环是遍历数组元素最常见的方法:

    1 var keys =Object.keys(o); //获得o对象属性名组成的数组
    2 var values=[]    //在数组中存储匹配属性的值
    3 for(var i=0;i<keys.length;i++)
    4 {
    5      var key=keys[i];  //获得索引处的键值
    6      values[i] =o[key]; //在values数组中保存属性值
    7 }

    在嵌套循环或其他性能非常重要的上下文中,可以看到这种基本的数组遍历需要优化,数组的长度应该只查询一次而非每次循环都有查询:

    1 for(var i=0,len=keys.length;i<len;i++){
    2       //循环体任然不变
    3 }

    假设数组是稠密的,并且所有的元素都是合法数据。否则,使用数组元素之前应该先检测它们。如果想要排除null,undefined和不存在的元素,代码如下:

    1 for(var i =0;i <a.length;i++){
    2      if(!a[i]) continue;  //跳过null,undefined和不存在的元素
    3 }

    如果只想跳过undefined和不存在的元素,代码如下:

    1 for(var i=0;i<a.length; i ++){
    2    if(a[i]===undefined)continue;  //跳过undefined+不存在的元素
    3     //循环体
    4 }

    最后,如果只想跳过不存在的元素而任然要处理在的undefined元素,代码如下:

    1 for(var i =0;i < a.length; i++){
    2      if(!(i in a)) continue; //跳过不存在的元素
    3 }

    7.多维数组

    JavaScript不支持真正的多维数组,但可以用数组的数组来近似。访问数组的数组中的元素,只要简单地使用两次[]操作符即可。

     1 //创建一个多维数组
     2 var tale =new Array(10);     //表格有10行
     3 for(var i =0;i <table.length;i++)
     4      table[i]=new Array(10);  //每行有10列
     5 //初始化数组
     6 for(var row=0;row <table.length; row++){
     7     for(col=0;col<table[row].length;col++){
     8            table[row][col]=row*col
     9   }
    10 }
    11 //使用多维数组来计算(查询)5*7
    12 var prdoduct =table[5][7]; //35
  • 相关阅读:
    CF 848C
    BZOJ 4025 二分图
    支配树学习笔记
    CF1120D Power Tree
    Codeforces 360A(找性质)
    Codeforces 142D(博弈)
    Codeforces 142B(二分染色、搜索)
    GYM 101981E(开关反转性质)
    Codeforces 1150E(树、线段树)
    Codeforces 1150D(字符串dp)
  • 原文地址:https://www.cnblogs.com/blinzhang/p/6058903.html
Copyright © 2011-2022 走看看