js引用类型--Array类型

Array类型
        ECMAScript数组的每一项可以保存任何类型的数据。即数组第一个位置可以保存字符串,第二个位置可以用来保存数组...以此类推。
        2.1 创建数组
            1.使用Array构造函数

    var colors=new Array();
    var colors=new Array(3); //创建一个包含三项的数值
    var names=new Array('cc'); //创建包含一项,即字符串"cc"的数值


                --------------------------------
                同时也可以也可以省略 new操作符

    var colors=Array(3);
    var names=Array("cc");


            2.使用数组字面量
                与对象一样,在使用字面量创建数组时,也不会调用Array构造函数

  var colors=["red","blue","green"];
   var names=[];     //创建一个空数值


        2.2 读取和设置数组的值
 

            var colors=["blue","orange","yellow"];
            console.log(colors[0])  //"blue"
            colors[1]="black";        //修改第二项的在值
            colors[3]="brown";         //添加第四项

        2.3 数组删除和添加
            由于数组的length属性它不是只读的。因此通过设置这个属性,可以从数组末尾移除项或添加项
            1.删除

                var colors=["red","blue"];
                colors.length=1;
                console.log(colors[1]);  //undefined


                如果设置length设置大于数组项数的值,则新增的每一项都会取得Undefined
                    colors.length=3;
                    console.log(colors[3])   //undefiend
            2.添加

                var colors=["red","blue"];
                colors[colors.length]="green";
                console.log(colors);   // ["red","blue","green"]


        2.4 检测数组
            Array.isArray(value)

       2.5  数组的方法
            1.栈方法
                数组可以表现的像栈一样即最新添加的项最早被移除。
                1.1  push()
                    该方法可以接受任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。
                  

  var colors=new Array();
  var count=colors.push("red","green"); 
   console.log(count); //2


                1.2  pop()
                    该方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
                 

   var colors=["green","yellow"];
   count=colors.pop();
   console.log(count); //"yellow"


            2.队列方法
                队列数据结构的访问规则是先进先出。队列在列表的末端添加项,从列表的前端移除项。

                  2.1  shift()

                    它能够移除数组中的第一项并返回该项,同时将数组长度减1。  

    var colors=["cc","red","green"];
    colors.shift();    //返回 "cc"


                2.2   unshift()

  var colors=["cc","red"];
   var count=colors.unshift(1);   
   colors.log(count); //3


            3.重排序方法
                3.1 sort()
                    sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串。该方法默认是按升序排列

 var nums=[1,12,3,4,31];
 nums.sort();
 console.log(nums); //[1,12,3,31,4]


                    因为是按字符串来比较所以要比较数值时,得到的结果并不是我们想要的。此时我们可以给sort()传入比较函数
                    

function compare(value1,value2){
     if(value1>value2){
        return -1;
     }else if(value1<value2){
        return 1;
       }else{
        return 0;
    }
 }
   var values=[1,3,5,6,12,3];
   values.sort(compare);
   console.log(values); //[12,6,5,3,3,1];

                    -----------------------------------------------------------
                    对于数值类型或者其valueOf()方法返回数值类型的对象类型,可以使用下面比较函数
                    function compare(value1,value2){
                        return value2-value1;
                    }
                    **:返回-1表示比较函数第一个值应该在第二个之前;返回-1表示第一个值应该在第二个之后的情况。
                3.2 resverse()
                     该方法用于反转数组项的顺序
                    

var s=[1,23,4,5];
s.reverse();
console.log(s); //[5,4,23,1];


            4.操作方法
                下面的concat()和splice()方法不会对原数组产生影响,请注意区别。
                4.1 concat()
                    该方法可以基于当前数值中所有项创建一个新数组。即该方法可以创建当前数组的一个副本,然后将接受到的参数添加到这个副本末尾,最后返回新构建的数组。

    var colors=["red","green","blue"];
    var newColors=colors.concat(["cc","wgs"]);
     console.log(colors);  //["red","green","blue"]
     console.log(newColors);["red","green","blue","cc","wgs"];


                4.2 slice()
                    该方法能够基于当前数组中的一或多个项创建一个新数组。
                    4.1 参数
                        1.只有一个参数的情况下。
                            该方法返回从该参数指定位置开始到当前数组末尾所有项。
                        2.如果有两个参数。
                            该方法返回起始和结束位置之间的项但不包括结束位置项
                        3.如果结束位置小于起始位置
                            返回空数值
                        4.如果参数中有一个负数
                            则用数组长度加上该数来确定相应的位置。如 对于数组长度为5来说 slice(-2,-1)=>slice(3,4);
                    4.2 用法

   var nums=[1,4,36,4,3];
   var nums2=nums.slice(1);     //[4,36,4,3]
   var nums3=nums.slice(1,4);  //[4,36,4]


                4.3 splice()
                    该方法主要用途是对数组项的删除、替换、插入。
                    ***:splice()方法始终返回一个数组,该数组包含了从原始数组中删除的项(如果没有删除任何项,则返回一个空数组).
                    4.3.1 功能
                            1. 删除
                                该方法对原数组进行删除,并将删除后的项以数组形式返回
                                两个参数:第一个参数指定要删除的起始位置,第二个参数表示要删除的项数

     var colors=["red","green","blue"];
     var removed=colors.splice(0,1);
     console.log(colors) //["green","blue"]
     console.log(removed) // ["red"]


                            2. 插入
                                可以向指定位置插入任意数量的项。
                                提供三个参数:起始位置、0(要删除的项数)和插入项
                                    例如: splice(2,0,"cc");从当前数组的位置2开始插入字符串"cc"

 removed=colors.splice(1,0,"yellow","orange");
 console.log(colors); // [ 'green', 'yellow', 'orange', 'blue' ]

  console.log(removed); // []


                            3. 替换    
                                可以指定位置插入任意数量的项,且同时删除任意数量的项(要删除的项数不必和插入的项数相等)。
                                三个参数:起始位置、要删除的项数和要插入的任意数量的项 

         removed=colors.splice(1,1,"red","purple");
         console.log(colors); //[ 'green', 'red',"purple" 'orange', 'blue' ]
         console.log(removed);//["yellow"]


            5.位置方法
                5.1 indexOf()
                    该方法从数组的开头(位置0)开始向后查找
                    参数
                        第一个参数:表示要查找的项
                        第二个参数:(可选的)表示查找起点位置的索引,从数组头开始(即0开始)

                    返回值:返回要查找的项在数组中的位置,若没有找到则返回-1
                    ***:查找的项与数组在匹配时是全等(===)
                5.2 lastIndexOf()
                    该方法则从数组的末尾开始向前查找
                    参数
                        第一个参数:表示要查找的项
                        第二个参数:(可选的)表示查找起点位置的索引,从数组头开始(即0开始)
                    ***:第二个参数索引也是从数组头开始的即数组的下标位置。
                    返回值:返回要查找的项在数组中的位置,若没有找到则返回-1
                5.3 案例

 var nums=[1,2,3,4,5,4,3,2,1];
 console.log(nums.indexof(4)); //3
 console.log(nums.lastIndexOf(4)) //5
 console.log(nums.indexOf(4,4)) //5
 console.log(nums.lastIndexOf(4,4)) //3
 var person= {name:"cc"};
 var people=[{name:"cc"}];


                ------------------------------------------------------------------------

  var person={age:12}; 
  var people=[{age:12}];
  var morePeople=[person];
  people.indexOf(person)      //false
  morePeople.indexOf(person); //true

                    关于上面的有疑惑的可以看看下面的测试:

  console.log(person===people[0])           //false
  console.log(people===morePeople)          //false
  console.log(person===morePeople[0])       //true


            6.迭代方法
                迭代方法主要是对数组值的检测。因为该方法都不会改变数组值
                1. every()
                    对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true

   var nums=[1,2,3,4,5,4,3,2,1];
   var result=nums.every(function(item,index,array){
         return (item>2);
   });
   console.log(result)  //false

                2.filter()
                    对数组的每一项运行给定函数,返回该函数会返回true的项组成的数值

var nums=[1,2,3,4,5,4,3,2,1];
 var result=nums.filter(function(item,index,array){
           return (item>2);
  });
  console.log(result)  //f[3,4,5,4,3]


                3.forEach()
                    对数组中的每一项运行给定函数,这个方法没有返回值
                            
                4.map()
                    对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组

     var nums=[1,2,3];
     var result=nums.map(function(item,index,array){
          return item*2;
      });
 console.log(result)  //[2,4,6]


                5.some()
                    对数组的每一项运行给定函数,如果该函数对任何一项返回true,则返回true

                        var nums=[1,2,3,4,5,4,3,2,1];
                        var result=nums.some(function(item,index,array){
                            return (item>2);
                        });
                            console.log(result)  //true


            7.归并方法
                1.reduce()
                    该方法从数组的第一项开始,逐个遍历到最后。然后构建一个最终的返回值
                    参数
                        一共有四个参数,分别是:前一个值、当前值、项的索引和数组对象。
                        这个函数返回任何值都会作为第一个参数自动传入给下一项,因此第一个参数是数组的第一项,第二个参数是数组的第二项
                    使用:
                 

       var values=[1,2,3,4,5];
        var sum=values.reduce(function(prev,cur,index,array){
                    return prev+cur;
          });
           console.log(15);


                2.reduceRight()
                    该方法从数组的最后一项开始,向前遍历到第一项,然后构建一个最后的返回值

猜你喜欢

转载自blog.csdn.net/qq_37674616/article/details/82192047