Unit05: 创建和访问数组 、 数组的常用方法_1

1.数组:

 

程序=数据结构+算法;

数据:变量...

算法:if if-else switch 循环........

 

好的数据结构,可极大提高程序的执行“效率”;相关的多个数据应集中存贮,集中管理;

 

引用类型:值不保存在变量本地的数据类型; ************

 

数组:一组"连续的变量"组成的集合 ------- 统一起一个名字;******* 批量管理多个数据;

     数组是引用类型的对象;

     变量中保存了数组对象的地址,也成引用了数组对象;

 

如何使用:

       1.创建: 4种;

              1.var 变量名=[];

                     -->创建一个空数字对象;

              2.var 变量名=[值1,值2,......值n]

                     -->创建数组同时,维数组指定初始元素;

              3.var arr=new Array();

                     -->创建一个空数字对象

                     new:创建一个新对象,并返回新对象地址;

                     Array:js中的数组类型;

                     new Array():创建一个“数组类型”的“新对象”;并返回新对象的地址;

              4.var arr=new Array(n);

                     -->创建n个元素的数组,但每个元素是空的;

                     new Array(值1,值2,......值n);

 

              找到数组:使用变量等效于直接使用变量引用的数组对象;

                       在数组对象中,每个元素都有一个下标,每个元素的位置号;下标从0开始,到元素个-1结束;

              使用数组的每个元素:

                     数组变量[i]-->获得i位置元素中的值;数组中的变量与普通变量用法完全一样;

 

       2.赋值:数组变量[i]=新值;

       3.取值:数组变量[i]

 

       null 和 undefined

       undefined:所有没有值得变量的默认值,自动复制。

       null:主动释放一个变量的对象;

             当使用完一个较大的对象时,“主动释放”对象;是好的习惯;

 

             垃圾回收器:专门释放对象内存的一个程序;

                         底层,后台,伴随当前程序,同时运行;

                       引擎,会定时自动调用,垃圾回收器;

                       只有一个对象,不再被任何变量引用时,才会释放;

 

 

       js中的数组 VS 其他语言的数组

       js中的数组:下标超出不会出错;

                 为不存在的下标位置“赋值”:会自动创建指定下标的新元素;

                 为不存在的下标位置“取值”:不会出错,也不会增加新元素,而是返回 undefined;

 

console.log(),并不是完全顺序执行;可能异步执行;

 

“赋值表达式”的结果是“等号右边的值”;(demo1)************

 

1.length

       数组是对象:封装了一组数据,并提供对数据的操作方法;

       .length属性:获得数组中的元素个数 != 实际元素个数;

              何时使用:

              1.arr[arr.length-1]:获得任意长度数组中的最后一个;********

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

              2.arr.length改小,会删除length后面的项;

 

2.数组遍历

       从下标0位置开始,依次取出每个元素,反复执行相同的操作;

       三要素:

       1.循环条件:下标从0开始,<length;

       2.循环变量:下标i,从0开始,每次递增1,到length-1结束;

       3.循环体:

 

3.关联数组

       可以自己定义下标名称的数组;

       如何创建关联数组:

       1.先创建一个空数组:

         var fbb=[];

         fbb["name"]="范冰冰";

         fbb["height"]="180cm";

         fbb["age"]=35;

             下标    值

             下标必须带引号;

       关联数组中的.length属性失效.**********

 

       关联(哈希hash)数组:下标不能重复;****

                       赋值和取值都是,利用“哈希算法(算出一个数)”,快速"精确"定位某个下标的“位置”,不用遍历;*********

 

       索引数组:缺点:下标自动分配,无意义,

                     要想按内容查找元素,只能从头开始遍历;

 

       遍历关联(哈希hash)数组:

              依次遍历arr中的元素,将当前元素的"下标"存入key中;**********

              for(var key in arr){ 遍历数组中的每个key,in前面可以放任何变量

                     key:仅得到当前元素的下标;

                     arr[key]:得到当前元素的值;

 

              }

 

       (哈希hash)数组:保存的是key value对儿;去重复*********demo3;

 

4.冒泡排序 demo4

 

       var arr=[4,2,5,3,8,7,6];

       //遍历数组中每个元素

       //下标从0开始,到<arr.length-1结束,下标++

       //如果当前元素>下一个位置的元素 交换两元素的位置;

       //声明变量pmt,用于交换;

       /******

       for(var i=0,tmp=0;i<arr.length-1;i++){

              if(arr[i]>arr[i+1]){

                     tmp=arr[i];

                     arr[i]=arr[i+1];

                     arr[i+1]=tmp;

              }

 

       }

       //第n轮:n从1开始,到<length结束;

       for(var i=0,tmp=0;i<arr.length-n;i++){

              if(arr[i]>arr[i+1]){

                     tmp=arr[i];

                     arr[i]=arr[i+1];

                     arr[i+1]=tmp;

              }

 

       }

       *******/

       for(var n=1;n<arr.length;n++){

              for(var i=0,tmp=0;i<arr.length-n;i++){

                     if(arr[i]>arr[i+1]){

                            tmp=arr[i];

                            arr[i]=arr[i+1];

                            arr[i+1]=tmp;

                     }

 

              }

       }

       console.log(arr);    

 

5.数组API

       数组=数据+操作数据的API

       1. 数组 to String:2种:

              var str=arr.toString();

                     -->输出数组中的内容,每个元素用逗号分隔

                     -->自动调用

              var str=arr.join("连接符")

                     -->输出数组中的内容,自定义元素间连接符

                     何时使用:2种固定套路

                     1. 将字符组成单词:arr.join("")

                     2. 将单词组成句子:arr.join(" ")

 

       2. 拼接和截取:*API无法直接修改原对象,而返回新对象*

              拼接:var newArr=arr.concat(另一个数组,值1,值2...)

              复制子数组:var subArr=arr.slice(starti,endi+1);

                                                 含头不含尾

 

       3. splice: 删除   插入    替换

              1. 删除:直接修改原数组对象

                     [var deleted=]arr.splice(starti,删除个数)

                     返回本次删除元素组成的数组

              2. 插入:

                     arr.splice(starti,0,新值1,...)

              3. 替换:

                     arr.splice(starti,删除个数,新值1,...)

              4. arr.reverse(); 颠倒数组中所有元素

 

 

优化:

       1.问题:频繁字符串拼接,造成内存浪费;(频繁+=会有浪费的字符串;)

         解决:先将要拼接的字符串放入数组;

              最后 arr.join("");

 

posted @ 2017-02-16 17:22  xiangcy  阅读(247)  评论(0编辑  收藏  举报