数组与数组API(String,join,concat,slice,splice,reverse)-06

2016-08-26-day06-am


1.数组

  • 什么是:内存中,连续存储多个数据的存储空间,再起一个名字
    一组变量的集合
  • 为什么:现实中存储多个相关数据,都是集中存储,共用同一个名字。
    程序=数据结构+算法
    好的数据结构可以极大的提高程序的执行效率
  • 何时:今后只要连续存储多个相关的数据都要用数组
  • 如何使用: 创建数组的3种方法如下:
1.创建空数组: 2种:
   数组直接量: var arr=[];
   用new: var arr=new Array();
2.创建数组同时,初始化数组的数据:
数组直接量: var arr=[值1,值2,...]
用new:  var arr=new Array(值1,值2,...);
3. 创建n个空元素的空数组:
  1.只能用new: var arr=new Array(n);
  • 访问数组中的元素:
    下标: 数组中唯一标识一个元素存储位置的序号
    默认从0开始,连续递增,不重复
    arr[i]: 访问下标为i位置的元素
    数组中,每个元素的用法和普通变量完全一样。
  • 数组的length属性:
    标识了数组中理论上的元素个数
    任何情况下: length永远是最大下标+1
    固定套路:
最后一个元素: arr[arr.length-1]
倒数第n个元素: arr[arr.length-n]
追加新元素:arr[arr.length]=新值;
缩容: arr.length--;

以下是一个简单的数组例子



    
        
        
    
    
        
    

数组与数组API(String,join,concat,slice,splice,reverse)-06_第1张图片
  • 特殊情况: js中的数组:3个不限制
    1.不限制元素的数据类型
    2.不限制下标越界
    获取元素值:
    下标越界: 不报错,返回undefined
    3.不限制元素的个数
    设置元素值:
    下标越界:
    自动在指定位置添加新元素
    自动修改length为最大下标+1
    稀疏数组: 下标不连续的数组
  • 遍历数组: 依次访问数组中每个元素
    for(var i=0;i

以下几个与数组有关的小练习



  
    
    
  
  
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第2张图片
  • 数组是引用类型的对象:
    引用类型的例子


  
    
    
  
  
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第3张图片

pm


1.垃圾回收: 定期回收不再被任何变量引用的对象。释放内存。
  1. 垃圾回收器:
    伴随主程序,并行运行的一个小程序
    定期回收内存中的不再被任何变量引用的对象。
  2. 引用计数器:
    每个对象上,标记正在引用对象的变量个数的一个属性
    每多一个变量引用对象,计数器就+1
    如果一个变量通过赋值为null释放对对象的引用,则计数器-1
    直到计数器为0,表示不再有任何变量引用该对象,则该对象被回收/释放
    建议: 如果使用完较大的对象,都要主动赋值为null。
2.关联数组:
  • 什么是:可自定义下标名称的数组
  • 为什么:普通的索引数组的下标都是无意义的数字。不便于快速查找元素。也容易出现歧义.
    [林心如, 81, 53, 86]
    name math chs eng
  • 何时:希望每个元素有专门的名称时
    通常用于快速定位元素
  • 如何使用: 创建: 2步:
     1.创建空数组: var lxr=[];
     2.向空数组中添加新元素: 
        使用自定义的字符串元素名作为下标
       lxr["name"]="林心如";
       lxr["math"]=81;
       lxr["chs"]=53;
       lxr["eng"]=86;
  • 访问元素: lxr["name"]
  • 强调: 关联数组的length失效
  • 遍历: 不能用for循环
    用for in循环: 其中in,表示依次取出数组中每个下标
      for(var key in hash){
         key//每个元素的下标名称
             hash[key]//当前元素值
      }
  • 关联/hash数组原理:
    hash算法: 接收一个字符串,并计算出一个尽量不重复的序号
    相同的字符串,计算出的号总是一样的
    不同的字符串,计算出的号大多数不重复
    存入数据:
    hash算法接收一个字符串的下标名,计算出一个不重复的序号。将数据存储在序号对应的数组位置上
    获取数据:
    将下标名称交给hash算法,算出和存入时完全相同的序号,直接去序号位置查找元素
    优点: 查找极快!
    和数组中元素个数,以及元素在数组中的位置无关。
    以下是hash的简单例子:


  
    
    
  
  
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第4张图片
数组API:

对象: 集中存储多个数据的一块存储空间, 并提供了操作数据的API
函数: 不属于任何对象的函数
方法: 必须用对象才能调动的函数,叫方法

  • 1. 转字符串: 2种
    1. 将数组中每个元素都转为字符串,再用逗号分隔: var str=String(arr);
    2. 将数组中每个元素都转为字符串,再用自定义下标连接每个元素:
      var str=arr.join("自定义连接符")
      强调:如果省略参数,默认等效于String

固定套路:
1. 无缝拼接: arr.join("")
2. 将单词拼接为句子: arr.join(" ")
3. 判断空数组: arr.join("")==""
4. 根据数组中的元素,动态生成页面元素的内容


例子:



  
    
    
  
  
    
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第5张图片
  • 2. 拼接和截取:
    拼接:
    var newArr= arr1.concat(值1,值2,arr2,....)
    将值1,值2,以及arr2中每个元素依次拼接到arr1结尾,返回新数组。
    何时使用: 将多个元素或其他数组,拼接到当前数组上时

强调:
1.concat无权修改原数组,只能返回新数组
所以,必须用变量接住拼接后的返回值
2.concat可打散数组类型的参数为单个元素**

截取:(复制)
var subArr=arr.slice(starti,endi+1);
复制arr中starti位置开始到endi结束的元素组成子数组返回。
何时: 选取数组中指定位置的子数组时

强调:
1. 无权修改原数组,只返回新子数组
2.含头不含尾
3.其实可使用负数参数,表示倒数第n个

简写:
1. 省略第二个参数,表示一直截取到结尾
2. 两个都省略,表示完整复制原数组中的元素到新数组。
不能只省略第一个参数——报错
例子:



  
    
    
  
  
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第6张图片
  • 3.splice: 删除,插入,替换

    删除数组中指定位置的元素:
    arr.splice(starti,n):
    删除arr中starti位置开始的n个元素
    其实: var deletes=arr.splice(starti,n)
    deletes: 返回的被删除的元素组成的临时子数组。

    在数组指定位置插入新元素:
    arr.splice(starti,0,值1,值2,...)
    在starti位置插入新值
    原starti位置的值被向后顺移

    强调: splice,不支持打散数组参数
    插入: splice vs concat
    concat只能在开头或结尾拼接,不能中间插入。但可打散数组类型参数
    splice可在任意位置插入,但不可打散数组类型参数。

替换数组中指定位置的元素
arr.splice(starti,n,值1,值2,...)
先删除starti位置的n个旧元素
再在starti位置插入新值

强调: 删除的个数和插入的个数不必一致
splice可自动调节数组的长度和位置



  
    
    
  
  
    
  

数组与数组API(String,join,concat,slice,splice,reverse)-06_第7张图片
image.png

翻转: arr.reverse();

你可能感兴趣的:(数组与数组API(String,join,concat,slice,splice,reverse)-06)