JavaScript中的Array

Array类型是ECMAScript 用的最多的类型了,ECMAScript中的数组每一项可以保存任何类型的数据,也就是说,数组的第一个项保存字符串,用第二个保存数值,用第三个位置来保存对象。二千数据的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
    1.创建数组数组的方式分为两种:
        1.1使用 nwe 的方式
          var colors=new Array();
         1.2.使用Array构造函数省略new操作符
               var colors=Array(3);      //创建一个包含3项的数组
               var names=Array("Greg");   //创建一个包含1项,即字符串“Greg”的数组


        2.使用字面量的方式来创建
        var colors=["red","blue","green"];       //创建一个包含3个字符串的数组
        var names=[];                            //创建一个空数组

  2获取和设置数组的值,试用方括号,如下所示:
       var colors=["red","blue","green"];       //定义一个字符串的数组、
       alert(colors[0]);                      //取到第一项,并显示,索引是从0开始的,所以是red
       colors[2]="black";                    // 修改第三项
       colors[3]="brown" ;                   //新增一个项

  3.数组的项数保存在其length属性中,这个属性始终返回0或者更大的值。
         var colors=["red","blue","green"];
         alert(colors.length);     //显示的是3
         var names=[];
         alert(names.length);      //空的数组,长度是0,返回的是0

       注意:数组的length属性不是只读的,因此,通过设置这个属性,可以从数据的末尾移除或项数组中添加新项。如:

            colors.length=4;     //现在数组就多了一个长度,值是undefind

            colors.length=2;    //数组的长度改变成了2个了



 4.检测数组
   使用ECMAScript5 新增的Array.isArray() 这个方法,如:
    if (Array.isArray(value)) {         //value是数组对象
        //对数组进行操作
  }

5.转换方法
  tostring():把数组转成string
  join(): 使用自定义的分隔符来构建这个这个字符。如:
    var colors=["red","blue","green"];
    var joinStr=colors.join("||");
    alert(joinStr);                        //red||blue||green

6.栈方法
  Push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。  
  Pop() : 从数组末尾移除最后一项,减少数组的length的值,然后返回移除的项。
  Var colors=new Array();                   //创建一个数组
  Var count=colors.push(“red”,”green”);    //添加两项
  Alert(count);                           //返回2
  Count=colors.push(“black”);             //推入另一项
  Var item=colors.pop();                  //移除最后一项,并返回移除的对象
  Alert(item);                           //所以,是 black
   Alert(item.length);                  //长度以减少了

7.列队方法
  Shift() : 移除数组中第一项,并返回该项,同时将数组长度减1;
  Var item =colors.shift();     //取得第一项
  Alert(item  );          //取得第一项:red
  Alert(colors.length);            //长度减1
  Unshift(): 在数组前端添加任意个项,并返回添加后的长度。


  Var colors=[“red”,”blue”];
   Var  count=Colors.unshift(“black”);    //添加一个black到这个数组的最前端,并返回长度
  Alert(colors.tostring());        // 现在数组里的项: black ,red,blue


8.重新排序方法
  Reverse(): 反转数组项的顺序;

9.操作方法
  Concat(): 可以基于当前数组中的所有项创建一个新数组。
  Var colors=[“red”,”green”,”blue”];
  Var colors2=colosr.concat(“yellow”,[“black”,”brown”]);
  Alert(colors);          //red,green,blue
  Alert(colors2);          //red,green,blue,yellow,black,brown

  Slice():基于当前数组中的一个或多个项创建一个新数组,
  Slice(index,number):index表示开始位置;number表示结束位置,不给默认是到当前数组末尾的所有项。如果结束位置小于开始位置,则返回空数组。
  Splice():向数组中插入项,使用方法 如下:
    删除:可以删除任意数量的项,只需要制定2个参数: 要删除的位置,要删除的项数
   插入:可以向指定位置插入任意数量的项,3个参数:开始位置,0(要删除的数),插入的项
   替换: 可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置,要删除的项,要添加的项。

    Var colors=[“red”,”green”,”blue”];
    Var removed=colors.splice(0,1);         //从0开始,删除1项
     Alert(remove);    //red  ,删除的项
    Removed=colors.splice(1,0,”yellow”,”orange”);    //从位置1开始插入两项
    Alert(removed);     //返回一个空数组

    Removed=colors.splice(1,1,”red”,”blue”);
       //从项1开始,删除一项,然后再添加两项,相当于替换,

    Alert(removed);   //yellow  ,返回被替换的项

10.位置方法
  IndexOf(value,index):   从数组开始位置向后查找,返回其下标
  lastIndexOf(valeu,index): 从数组的末尾开始向前查找。返回其下标
  包含两个参数:value:要查找的项, index:开始找的位置,没有找到就返回-1;

    Var number=[1,2,3,4,5,4,3,2,1];
    Alert(number.indexof(4));    //从开始位置找起,而且没给开始位置,不给是从0开始找起,会一直找,直到找到,返回对应的下标,并返回其下标; 所以返回的是3

    Alert(number.indexOf(4,4));  //这次,给了起始位置,所以会从下标4开始找起,下标4对应的是值 5,5后面就是4了,所以返回是 5:
    Var person={“name”:”a”};
    Var people=[{“name”:”a”}];
    Var morePeople=[person];
    Alert(people.indexOf(person));   //-1
    Alert(morePeople.indexOf(person));   //0



11.迭代方法
  Every():对数组何总的每一项运行给定函数,如果该函数对每一项都返回true,则返回true;
  Filter();对数组中的每一项运行给定函数,返回这个函数会返回true的项组成的数组。
  ForEach(): 对数组中的每一项运行给定函数,这个方法没有返回值。
  Map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  Some():对数组中的没一项运行给定函数,如果该函数对任一项返回true,则返回true
  ,以上方法都不会修改数组中包含的值。

    Var number=[1,2,3,4,5,4,3,2,1];
      //item :表示数组具体元素,index:表示下标 ,array:表示当前数组
    Var everyResult=number.every(function(item,index,array){
         Return (item>2);
    });

    Alert(everyResult);  //false

    Var someResult=number.some(function(item.index,array){
       Reutn (item>2);
    });
    Alert(someResult);   //true

  以上代码调用every()和some(),传入的函数只要给定项大于2就会返回true,对于every(),它返回true,因为只有部分数组项符合条件,对于some(),结果就是true,因为至少有一条大于2.


   Var filterResult =.filter(function(item,index,array){
     Reutnr (item>2);
    
  });
  Alert(fileterResult);    //[3,4,5,4,3]
  Var mapResult=number.map(function(item,index,array){
      Return item*2;

  });
  Aelrt(mapResult);   //[2,4,,6,8,10,8,6,4,2]

  number.forEach(function(item,index,array){
      //执行操作
  });


注意啊: 以上有很多的方法必须要现代浏览器上才用啊,ie9 以前的浏览器都不支持,今天就被坑了。最后用JQURY解决的。
            



posted @ 2014-03-31 15:39  胡一飘  阅读(334)  评论(0编辑  收藏  举报