数组

 ****数组
   程序=数据结构+算法
    算法:程序执行的步骤
    数据结构: 数据在内存中的存储结构
              好的数据结构,可以极大提高程序的执行效率


   什么是数组: 内存中连续存储多个数据的存储空间,再起一个名字。
其实就是多个变量的集合,起一个统一的名字
   何时使用数组: 只要存储多个相关的数据,都要用数组集中存储。
   如何使用数组: 
       创建: 
1. 使用数组直接量,创建空数组:var arr=[];
2. 使用数组直接量,创建数组并初始化元素:
var arr=[值1,值2,.....];
        3. 使用new创建空数组: var arr=new Array();
        4. 使用new创建n个空元素的数组: 
var arr=new Array(n);
        5. 使用new创建数组并初始化元素: 
var arr=new Array(值1,值2,....);
       访问: 数组名[下标] ——元素
      每个数组元素的用法和变量完全一样
       特殊: 读取元素: 下标越界: undefined!
             修改元素: 下标越界: 自动在新位置添加新元素
结果: 下标可能不连续。——稀疏数组
       不限制: 
  1. 不限制元素的个数
           2. 不限制元素类型
           3. 不限制下标越界


    数组的length属性: 记录的是数组的元素个数!
在稀疏数组中,实际元素个数,很可能小于length
        但是,任何数组的length属性永远等于最大下标+1
              数组最后一个元素的下标永远等于length-1
    固定套路: 
1. 最后一个元素: arr[arr.length-1]
        2. 追加新元素: arr[arr.length]=新值;
        3. 缩容/删除结尾的元素: arr.length-=n


    数组是引用类型的对象:
        多个变量可使用同一地址,引用同一个数组对象
一个变量释放对数组对象的引用,用null
    垃圾回收器: 伴随主程序后台运行的,自动回收不再使用的对象的程序。
     何时回收一个对象:如果一个对象的引用计数器为0
    说明不再有变量引用该对象的地址
                     垃圾回收器就会释放对象所占的内存
     建议:如果使用过较大的对象,在使用后,就要立刻释放。


  遍历数组: for(var i=0;i<arr.length;i++){
//当前元素的值: arr[i]
              }
    索引数组: 下标都是数字的数组


    关联(hash)数组:
什么是: 可自定义下标名称的数组
        为什么: 索引数组的下标无具体意义,不便于查找
        何时使用: 只要需要自定义数组下标时
                  ——便于查找!
        创建: 2步: 1. 创建空数组
  2. 向空数组中添加指定下标名称的元素
访问: 数组名["下标"]
强调: hash数组的length失效!永远为0
      遍历关联数组: for in
for(var key in hash){//自动依次获得每个元素的key
   //当前元素: hash[key]
        }//也可以遍历索引数组


   ***hash数组的原理:
hash算法: 将字符串,计算出一个尽量不重复的数字
字符串的内容相同,则计算的数字一定相同 
添加元素: 将自定义下标名称交给hash算法,得到一个尽量不重复的地址序号。直接将元素值保存到序号对应的位置。
      获取元素: 将指定的下表名称交给hash算法,得到一个和添加时完全相同的序号。直接访问序号所在的位置。

   ***不需要遍历!——查找速度和元素个数无关


3. ****数组API: 浏览器厂商已经实现的函数
程序员不需创建,直接使用。
   1. arr to string: 
1. var srt=String(arr) : 
每个元素值之间用逗号分隔
        2. var str=arr.join("连接符"):  
可自定义连接符
省略"连接符",等效于String
固定套路:
  1. 将字符拼接为单词(无缝拼接)
      arr.join("")
问题: 频繁的字符串拼接会浪费内存
       解决: 先将要拼接的子字符串,放入一个数组
     最后将数组无缝拼接为字符串
  2. 将数组拼接为页面元素


   2. 拼接数组: 将concat后的参数,拼接到arr1之后
var newArr=arr1.concat(值1,值2,arr2,...)
强调: 1. concat不修改原数组,只能返回新数组
  2. concat参数中的数组会被打散为单个元素再拼接
   3. 获取子数组: 
var subArr=arr1.slice(starti[,endi+1])
      从arr1中截取starti位置到endi位置的元素组成的子数组
强调: 1. 不修改原数组,只能返回新的子数组
     2. 含头不含尾
   3. 省略第二个参数,表示从starti一直获取到结尾
   4. splice: 删除,插入,替换
强调: 直接修改原数组!
删除: arr.splice(starti,n);
 强调:其实splice也有返回值:
    返回所有被删除的元素组成的子数组
  var deletes=arr.splice(starti,n);
        插入: arr.splice(starti,0,值1,值2,...)
 强调: 原starti位置的元素及其之后的元素,被顺移
        替换: arr.splice(starti,n,值1,值2,...)
  从starti位置开始,删除n个元素,再插入新元素
 强调: 删除的个数n,和插入新元素的个数不必相同
   5. 翻转数组: arr.reverse();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值