【知识整理】javascript基础语法总结(5)——数组

来源:互联网 发布:js倒计时跳转页面代码 编辑:程序博客网 时间:2024/06/07 00:45
一.数组:连续保存多个数据的引用类型的对象
   1.数组的分类:
     (1)关联数组:可自定义下标的数组(hash算的是字符串的code)
     (2)索引数组:自动分配下标的数组
二.索引数组

   1.创建数组

     (1)创建空数组:

var 数组名=[];
     (2)创建数组同时,初始化数组:
 var 数组名=[值1,值2,值3,...];
     (3)创建空数组:

var 数组名=new Array([n]);//n表示初始元素的个数,省略则创建空数组

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

var 数组名=new Array(值1,值2,...);
   2.内存中的数组:引用类型的对象,每个值相当于一个元素, 每个元素都有一个下标,下标从0开始,每次增1,到个数-1结束。
   3.使用数组中每个元素:
     (1)语法:数组名[i];//i表示该元素在数组中的索引/下标
     (2)数组越界:越界都不会报错,在取值的时候会返回undefined,赋值时候会在指定位置添加新元素并自动修改length属性。下标不连续的叫稀疏数组。
     (3)访问数组最后一个元素:数组名[数组名.lenth-1];
   4.获得数组元素的个数:
     (1)语法:数组名.length;(永远等于最大一个下标+1)
   5.数组的取/赋值:
     (1)赋值:数组名[元素索引值] = 值;
     (2)取值:数组名[元素索引值];
   6.数组的遍历:

     (1)

for(var i=0;i<数组名.length;i++){ 当前元素:数组名[i] }
三.关联数组: 
   1.优点:快速精确查找!不需要遍历!和数据量无关!相当于把下标名字符串给Hash算法,很快查找到。
   2.Hash算法:内存中的一个小程序,专门接收一个字符串,并计算出一个尽量不重复的编号,相同的字符串计算出的号一定相同。不同的字符串计算的号一般不同。添加元素时候
   3.创建:
     (1)先创建空数组:

 var arr=[];
           再向数组中添加元素:
 arr[key]=value;
     (2)key必须是字符串,且不可重复
     (3)数组名.length属性失效,结果永远为0
   4.使用:
     (1)数组名[key];//key关键字不可重复
     (2)所有数组如果访问不存在的key关键字位置,不会报错,会返回undefined
   5.遍历:
     (1)语法:

 for(var key in 关联数组名){//反复取出每个key放入变量key中,key中获取的仅是元素的下标名称                     当前元素的值: 关联数组名[key];                     //此处不加双引号,因为本来key就是字符串类型}
     (2)其实该方法也可以遍历索引数组,但无法控制开始和结束
     (3)只要遍历索引数组,选普通for循环,只要遍历关联数组,只能用for in循环
四.数组API:浏览器厂商已经实现的方法,开发人员直接调用,不需要了解具体实现。
   1.将数组转化为字符串:
     (1)
var str=arr.toString(); //返回数组中元素的内容,用逗号分隔
      (2) 
var str=arr.join("连接符");//可以自定义分隔连接符
   2.拼接数组:
     (1)
var newArr=arr1.concat(arr2,值1,值2,......);
     (2)此例中arr1不发生改变。会自动打散参数中的数组,以单个元素形式拼接到新数组中。
     (3)concat不修改原数组,总是返回一个新数组
   3.获取子数组:
     (1)
var subArr=arr.slice(start,end+1);//start:开始位置的索引值,end:结束为止的索引值
     (2)含头不含尾的原则,不包含结束的位置。
   4.删除/插入/替换数组元素:
     (1)删除:

var deleted=arr.splice(starti,n);//从starti位置开始,直接删除数组n个元素
     (2)插入: 

arr.splice(starti,0,新值1,新值2,......);//在starti位置插入新值1,新值2,...,原starti位置及其之后的元素,被向后顺移
     (3)替换:
arr.splice(starti,n,新值1,新值2,......);//新元素的个数和n可以不相等,数组会自动调整元素的位置和长度
   5.颠倒数组中元素:
     (1)数组名.reverse();//直接修改原数组
   6.数组排序:
     (1)数组名.sort();//默认一切都转为字符串,按unicode编号按升序排列,只有在排序字符串类型的元素时候用。
   7.栈和队列:在js中其实都是数组,只不过使用了不同的方法模拟出栈和队列的效果。
     (1)栈:在js中为一端封闭,只能从另一端进出的数组
     (2)结尾入栈:①数组名.push(新值);②数组名[数组名.length]=新值;
     (3)结尾出栈:var a = 数组名.pop(); //返回值为出栈的数组元素
     (4)无论出入栈都不会影响已有元素的位置
     (5)开头入栈:数组名.unshift(新值);
     (6)开头出栈:var a = arr.shift();  //返回值为出栈的数组元素
     (7)队列:在js中,队列为只能从结尾进入开头出的数组;
五.二维数组:数组的元素又引用了另一个子数组
   1.使用:
     (1)保存横行竖列的二维数据
     (2)保存上下级关系的数据(公司有很多部门,部门有很多员工)
   2.创建二维数组:
     (1)创建一个空数组:var data=[];
     (2)设置数组中每个元素再引用另一个数组;
     (3)例:

var data = [];data[0] = [0,0,0,0];data[1] = [1,1,1,1];data[2] = [2,2,2,2];
     (4)访问二维数组元素:数组名[行下标(从0开始)][列下标(从0开始)]; 找不到返回undefined
     (5)访问data数组中第1行第1列元素:

data[1][1]; //1
     (6)二维数组下标越界问题:行下标越界会报错,列下标越界不会报错,会显示undefined;
     (7)例:生成一个4*4二维数组
var data = [       [0,0,0],       [1,1,1],       [2,2,2]];
     (8)二维数组遍历:外层循环控制行遍历,内层循环控制列遍历
for(var r=0;r<data.length;r++){for(var c=0;c<data[r].length;c++){      当前元素:data[r][c]        }}








1 0
原创粉丝点击