码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript之数组(一)

时间:2016-12-23 02:13:59      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:javascript   数组   冒泡排序   

1.***数组:多个变量的集合,起了一个统一的名字  --用法

                连续保存多个数据的引用类型的对象    --存储

    为什么要使用数组:

        程序=算法+数据结构

            好的数据结构。可以极大提高程序的执行效率

    何时使用:程序中都是用数组集中管理多个数据


    如何使用:创建   赋值   取值

        1.创建:4种

            1.创建空数组:var 数组名=[];  -->js中见到[],就是数组

            2.创建数组同时,初始化数组中的每个元素:

                    var 数组名=[值1,值2,值3........];

                内存中的数组名:引用类型的对象;每个值相当于一个元素;每个元素都有一个下标;

                                            下标从0开始,每次增1,倒数个数-1

                数组对象的个数:arr.length      arr.length永远等于最后一个下标+1


            3.创建空数组:var 数组名=new Array(); -->([n]);

                    new:创建一个新对象

                    Array:数组类型

                    n:表示初始元素的个数,省略则创建空数组

            

             4.创建数组同时初始化数组元素:

                    var 数组名=new Array(值1,值2 .....);

    

        如何使用数组中每个元素:数组名[i]

            数组名[i]的用法和普通的变量完全相同
             

        2.赋值:

               1.数组名[i]=值

               2.不限制:  --和其他语言最大的不同

                    1.不限制元素的个数:没有数组越界错误,length自动增长为最大下标+1

                    2.不限制元素的类型

             

        3.取值:任何位置使用数组名[i],等效于直接使用数组名[i]中的值

            数组是引用类型的对象:

                原始类型的值,复制后,相互不影响

            将数组中保存的数组对象的地址值,复制给另一个   ---引用类型

            引用类型的对象,赋值后,依旧引用同一个对象,任何修改,都会影响对方

    

       给一个数组赋值为null,即为释放

            null:主动释放一个对象

                垃圾回收器:专门释放内存中不再被引用的对象的小程序,伴随主程序执行;

                                     每个对象都有一个引用计数器,增加引用+1,减少引用-1

                                     一个对象,引用计数器为0,不再被任何变量引用时,才能被回收

                    建议:使用完较大的对象后,都要主动释放


                数组的length属性固定套路:2个

                    1.获得最后一个元素值:arr[arr.lenght-1]

                    2.向数组末尾追加一个新元素:arr[arr.lenght]=新值


        遍历数组:依次对数组中每个元素执行相同操作

        //三要素:

            1.下标:i<数组长度

            2.变量:下标i从0开始,每次++

        for(var i=0;i<arr.length;i++){

                                当前元素:arr[i]

                                                }


        如何遍历hash数组:

            for(var key in hashArr){//反复取出每个key放入

                                                }

            for in 结构也可以遍历索引数组,但是无法控制开始和结束,默认从头开始到尾部结束

            今后:只要遍历索引数组,选普通for循环;只要遍历关联数组,hash数组,只能用for in循环


            笔试题:例1:

var chyx=[];
chyx["name"]="小笼包";
chyx["sx"]=81;
chyx["yw"]=61;
chyx["yy"]=89;
var
keys=[];
var
i=0;
for
(keys[i++] in chyx);//获取一个关联数组所有的下标
console.log(keys);//name sx yw yy

      例2:定义一个函数,找出一个整数中的最大值            

/*定义一个函数,找出一个整数中的最大值*/

    /*定义一个函数 getMax,接收一个数组对象参数arr
    * 将arr中第一个元素放入变量max
    * i从1开始遍历arr中的元素的值
    * 如果当前元素>max
    * 将当前元素存入max中
    * 遍历返回max*/

 
function getMax(arr){
     
var max=arr[0];
      for
(var i=1;i<arr.length;i++){
         
if(arr[i]>max){
              max=arr[i]
;
         
}
      }
     
return max
  }
 
/*var arr=[4,6,2,5,9,7];*/
 
console.log(getMax([4,6,2,5,9,7]))

 例3:定义函数,去掉数组中重复元素

/*定义函数,去掉数组中重复元素*/
/*定义函数delRepeat,接收一个数组arr*/
   
function delRepeat(arr){
       
//定义空数组hash
        //i从第一个元素开始遍历arr中每个元素
        //  将当前元素作为key,加入hash中,值设置为1
        //(遍历结束后)将arr重置为空数组
        //使用for in循环将hahs中每个key放入arr中
        //返回arr
       
var hash=[];
        for
(var i=0;i<arr.length;i++){
            hash[arr[i]]=
1;
       
}
        arr=[]
;
       
i=0;
        for
(arr[i++] in hash);
        return
arr;
   
}
console.log(delRepeat(["a","a","d","v","v","r","f","a"]))


2.数组的API:浏览器厂商已经实现的方法;开发人员直接调用,不需要了解具体实现

        将数组装换为字符串:2个

            var str=arr.toString():返回数组中元素的内容,用逗号分隔

            var str=arr.join("连接符"):***可自定义链接符***

        固定套路:

            1.无缝拼接数组每个元素:var str=arr.join("") --如果不加“ ”,等效于加;

            2.将单词拼接为句子:var str=arr.join(" ");

            3.将数组拼接为html元素:案例:

var provs=["北京市","天津市","河北省"];
var
html="<select><option>"+provs.join("</option>><option>")+"</option></select>";

           优化:数组的拼接比字符串拼接效率更高!

            建议:今后凡是频繁的字符串拼接,都要2步:

                    1.先将要拼接的子字符串放入一个数组中

                    2.调用数组的join方法,一次性生成结果字符串


        获取数组字符串:toString()方法可以把数组转换为字符串,并返回结果

                                join([separator])返回一个字符串,由每个元素转换而成的字符串使用指定的separator拼接而成

        获取子数组:var subArr=arr.slice(stari,endi+1);

                        starti:开始获取的下标位置

                        endi:表示获取到的小标位置

                        ***含头不含尾

                        slice方法支持倒数参数:其实负数下标不存在;假定的负数下标从-1开始


        splice:删除   插入  替换

                        1.删除:arr.splice(starti,n)  --starti位置开始,删除n个元素

                        2.插入:arr.splice(starti,0,新值1,新值2....)  --starti位置插入新值1,新值2 ,原stari位置及其之后的元素,被 顺移

                        3.替换:arr.splice(starti,n,新值1,新值2.....)

                                新元素的个数和n不一定相等

                                数组会自动调整元素的位置和长度

    

            颠倒数组中所有元素的位置:arr.reverse();

       强调:

           var x=arr[i];//arr[i],复制一份,改x,与arr[i],无关


3.数组的sort方法:arr.sort()

    特点:默认按升序排列;默认一切都转为字符串,再按字符串比大小

  自定义排序规则:2步:

     1.定义比较器函数:专门比较任意两值大小的函数

        规定:两个参数(a,b);

           必须返回数字:如果a>b,就要返回正数

                   如果a<b,就要返回负数

                  如果a=b,就要返回0      

//定义比较器函数
function compare(a,b){
   
/* return a-b;*/
 
return parseFloat(a)-parseFloat(b);
}

    2.将比较器函数对象作为参数传入sort方法中:

        arr.sort(比较器函数对象函数名)

//定义比较器函数
   
function compare(a,b){
      
/* return a-b;*/
       
return parseFloat(a)-parseFloat(b);
   
}
       arr.
sort(compare);
           
console.log(arr);

            //函数作为对象传给别人用,不加()


    冒泡排序:bubble --手写级别

function bubble(arr,compare){
   
for(var r=1;r<=arr.length-1;r++){
       
for(var i=0;i<arr.length-r;i++){
           
if(compare(arr[i],arr[i+1])>0){
               
var temp=arr[i];
               
arr[i]=arr[i+1];
               
arr[i+1]=temp;
           
}
        }
    }
}
   
function compare(a,b){
       
return parseFloat(a)-parseFloat(b);
   
}
   
var arr=[‘35px‘,‘12px‘,‘5px‘,‘123px‘];
   
bubble(arr,compare);
   
console.log(arr);


    函数 VS 方法:

    1.都是function对象

    2.不属于任何对象的叫函数(不需要通过.访问)

    3.属于特定对象的函数叫方法(需要通过对象,才可以访问)

javaScript之数组(一)

标签:javascript   数组   冒泡排序   

原文地址:http://9140644.blog.51cto.com/9130644/1885267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!