• 33.数组声明方式(var构造函数) 、检测数组类型、数组的属性(封装好的就一个length)、数组的方法


    数组:一组数据的有序集合

    创建方式:var声明   构造函数

    界定符:【】,里面的变量用  , 隔开

    数组与对象不同:

                      一:var 声明方式创建数组

                               1.数组是有序集合对象

                           2.数组用下标取值必须用【】从0开始计数,取属性值可以用.

                              数组里可以存放任意的数据类型,只要合法

                                                                      

                        3.兼容性问题:关于 逗号的问题,最后一项后面不要加 逗号, 因为在IE8以下,加 逗号会默认最后一项为undefined,因此数组长度会加一

                          

                 二:使用new Array()构造函数来创建数组,(通常不用构造函数来创建数组)

                       参数:1.空  2.数字  3.字符串

                     ①:   Array,如果创建的时候不需要传递参数,可以省略()

                         

                     ②:Array,如果1.传的参数是数字,数字决定数组的长度,会用empty来填补空位

                                

                                            2.传的参数不是数字,就是数组项  

                               

                                

                               

    二:检测数组类型

                                

                              只要是对象,就是引用数据类型,操作的就是内存地址。

                                 把arr的内存地址赋值给b,此时b与arr都可以操作【1,2,3】,且互相影响,

                   

    三:数组的属性:

             1.length  

                              

                             ① 获取不存在的下标:undefined

                             

                             ② 给超过长度的下标赋值,js会自动用empty填充增加长度,直到给相应的下标赋值

                             

                            ③可以自定义数组长度:

                                     自定义长度>创建时的长度,数组会自动用empty填充

                           

                                    自定义数组长度<创建长度,数组会自动把长度之外的数组项删去。

                          

                            可以用:1.下标取值    2.for in 遍历    3. for 循环       

                                 1.下标取值      

                              

                                2.for  in遍历

                             数组是对象,可以用 for in 遍历对象属性的方法来遍历, 下标相当于属性名

                             

                                3.for 循环

                             

    四:数组的方法

           关心点  1):是否改变原数组

                      2):返回值是什么

               ①:数组的头尾操作 四个方法:(push(n1,n2) 、pop()、unshift(n1,n2)shift()

                        push(添加尾部值1,2) 尾部插入数值,改变原数组,返回值是数组长度

                      1.push:  

                            调用数组对象调用push,改变原数组值,将数组长度返回给index

                        2.pop()方法:删除数组尾部项,返回值为删除的数组项 :

           

                         3.unshift(n1,n2),在数组头部添加,返回数组长度

                     

                      

                          4.shift(),删除数组头部,返回被删除值

                     

                   ②数组的合并:

                                      concat()             a.concat(b) /a.concat(b,c)       不会改变原数组,会返回新数组。

                                                                 可以与多个数组合并,可以放数组变量,可以放数组字面量,也可以放数组散列值(数组项)

         

                

          

                ③:数组的截取 slice(开始位置,结束位置)    [)左闭右开区间,不会改变原数组,返回新数组

                

                                    如果不给结束位置,就会截取到最后:

         

                         slice(0):起始位置写0,不给结束位置,会将数组复制一份,但不会复制数组的内存地址,因此arr改变并不会影响arr2,

    小技巧:数组调用slice(0)方法可以达到复制数组的目的。

       

             

             

                          slice(),括号里放负数

                   eg1:放负二    length 为 7  7+(-2)=5 ,相当于slice(5),从字面意义上更好理解:打印最后两个。但要知道是从下标5开始的。用length+负数

                    用户传入负值,底层会把它转为正值的形式。如slice(-2) ,在底层转为slice(5),但做题或者理解上,知道是最后两个更好理解。

        

                   eg2:如果 负数绝对值大于length,相当于slice(0)

               

                   slice 遵循左闭右开

            

          

            总结slice:1.正值取法,左边的值小于右边

                           2.负值取法,左边的值小于右边,(但左边的绝对值大于右边),负值取法,也是从左向右截取,只不过从后面开始。

                     注意:如果左边的值不小于右边,值为空数组

       

                  ④:splice:数组的多功能方法:可以替换、插入、截取/删除,可以改变数组的长度

                                    splice是左闭右闭区间      (slice是左闭右开区间)

                        第一个参数:开始替换的位置

                        第二个参数:替换几项

                        第三个参数及以后的参数:替换的内容

                 1):替换(可能会改变数组长度)

                   splice 不给替换项就是删除功能,删除后不会用替换项来替换,因此,数组中原数组项的下标位置会发生变化。

                   

                    

                   用dongxie替换了三项,改变了数组的长度

                 

               splice 返回被替换的项组成的数组

                 2)删除:不给替换项,就删除

        

            splice 返回被删除的项组成的数组

                 3)插入:替换项数为0,就插入

              

              插入,没有被替换、被删除的项,因此返回空数组

              ⑤:

       数组排序:

        1):reverse:会改变原数组,返回的是倒序数组,该数组与原数组索引一致。改变原数组对象,新的也跟着改。

        

           返回倒序的数组索引(索引就是内存地址)

              因为返回的是数组索引,所以改变原数组arr,index倒序数组也跟着该变(slice(0)复制的数组,而非索引,因此slice(0)返回的是新数组,改变原数组,复制的数组不会跟着改变,注意区别)

                2.sort():会改变原数组,从小到大排序(字符编码),返回的是数组索引,改变原数组,新数组跟着改。

                     由小到大比较的是字符编码,都是数字的话看首字符,eg:13   5      1<5,因此sort(),之后 13 < 5

                     可以有三种排序: 由小到大  由大到小 随机排序  //借助回调函数

              

             

          1、11、12同级 11与 3   因为1<3,故在前面

              鉴于:sort()是按字符编码来有小到大排序,可能出现 13 < 2 的情况,所以使用向sort里添加回调函数的做法

              

              优化:  sort(function(a,b){

               return a-b;})   //意思为 如果a>b,返回正值,按由小到大来排序,a在后,b在前,以此类推,会遍历数组每一项,直到彻底的有小到大排列完成

          sort(function(a,b){return b-a;})//由大到小排序

              sort(function(){return Math.random()-0.5})//随机排序,不用写参数

                   

                           由大到小排序

                           随机排序,不用写参数。   Math.random() 返回0-1之间的随机数

               ⑥:join():数组转成字符串:不改变数组,返回数组项和连接符拼接的字符串

          括号内不传参数,是,连接数组各项

                          括号内要么不传参数,要么传字符串,来作为连接数组各项之间的连接符。

         

          join(""):  传空字符串,可以去掉数组各项之间的,组成字符串

        

               

              toString()也能转,只是不能传参数,用,连接

     

                ⑦:数组的查询:indexOf 、 lastIndexOf

       indexOf 返回的是第一次查到的下标,从头开始查找,如果查询不到返回-1 ,

       lastIndexOf:从后往前查找 

             如果indexOf lastIndexOf 给定第二个参数。第二个参数:开始查找的起始位置 

        

       

             lastIndexOf:从后往前查找

        

            从4这个下标开始向后查找

       

        从四这个下标向前查找

      

            ⑧:Array.isArray() 判断是不是数组

      

     

     

     

       

       

     

     

      

           

        

     

            

     


     

        

                         

      

                     

                

             

                

                     

             

                   

     

         

                                  

                                        

                              

     

                                           

                             

                 

                                

                   

                        

     

                            

  • 相关阅读:
    C#调试信息打印到输出窗口
    C#拼接SQL中in条件
    从图像到知识:深度神经网络实现图像理解的原理解析
    Cocoa Touch(六):App运行机制 NSRunLoop, KVC, KVO, Notification, ARC
    Cocoa Touch(五):网络请求 NSURLSession/AFNetworking, GCD, NSURLResquest
    JQuery:选择器、动画、AJAX请求
    Cocoa Touch(四): 多线程GCD, NSObject, NSThread, NSOperationQueue
    Socket、RPC通信实例,简单版本,仅供查阅
    Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics
    Cocoa Touch(二):数据存储CoreData, NSKeyArchiver, NSOutputStream, NSUserDefaults
  • 原文地址:https://www.cnblogs.com/yzdwd/p/12536652.html
Copyright © 2020-2023  润新知