JavaScript_7
Array类型:
- JavaScript中的数组可以保存任何类型的数据
- JavaScript中的数组大小可以动态调整
数组的声明:
- 通过Array()构造方法创建
var names1=new Array();//创建一个空的数组 var names2=new Array(20);//创建一个长度为20的数组 var names3=new Array("rose","jerry","tom");//创建长度为3并且三个值分别为rose,jerry,tom的数组 alert(names1.length);//0 alert(names2.length);//20 alert(names3.length);//3 //数组的声明可以省略new关键字 /* var names1=Array();//创建一个空的数组 var names2=Array(20);//创建一个长度为20的数组 var names3=Array("rose","jerry","tom");//创建长度为3并且三个值分别为rose,jerry,tom的数组 */
- 通过数组字面量方式创建
var names1=["tom","jack"]; var names2=[];//空数组 alert(names1.length);//2 alert(names2.length);//0
数组的使用:
var names=["tom","jack"]; names[2]="rose";//设置数组的第三个值为rose names.length=4;//设置数组的长度为4,实际有三个元素,第四个为undefined alert(names.length);//4 alert(names[3]);//undefined names[99]="tiny";//设置第100个元素为tiny,中间96个为undefined alert(names.length);//100 names[names.length]="lily";//往数组的末尾添加新元素,长度加1,长度为101
- 数组的默认值为undefined
var names=["tom","jack"]; alert(names);//显示数组tom,jack alert(names.toString());//数组转为字符串,调用toString()方法,tom,jack alert(names.join("-"));//更改数组显示的连接符,tom-jack
数组中的栈方法:
- 栈,遵循后进先出原则
var names=[]; var count=names.push("tom","jack");//从前向后往栈里压,tom在栈底 alert(count);//2 alert(names);//tom,jack count=names.push("rose");//rose在栈顶 alert(count);//3 alert(names);//tom,jack,rose var item=names.pop();//rose被出栈 alert(item);//rose alert(names.length);//2 alert(names[0]);//tom
数组中的队列方法:
var names=[]; names.push("tom","jack");//栈底tom var item=names.shift();//栈底,也就是队列的前面,先到的先出 alert(item);//tom tom在队前 alert(names.length);//1 tom出列了,剩下一个jack var count=names.unshift("tom");//tom插队到队前,又变为2个了 alert(count);//2 count=names.unshift("jim","mary");//mary插到队前,jim插到队前 4个人了 alert(count);//4 alert(names);//jim,mary,tom,jack
数组中的排序:
- 反转数组
var nums=[1,2,6,3,4,5]; nums.reverse(); alert(nums);//5,4,3,6,2,1
- 自然排序
var nums=[1,10,23,5,15]; nums.sort(); alert(nums);//1,10,15,23,5 先按第一个数排,再按第二个排
- 根据排序函数排序
- sort方法接受一个排序函数,根据排序函数进行排序
- 排序函数的规则:如果第一个参数应该在第二个参数之前,则返回一个负数,如果两个参数相等则返回0,否则返回正数
function compare(v1,v2){ if(v1<v2){ return -1; }else if(v1>v2){ return 1; }else{ return 0; } } var nums=[1,10,23,5,15]; nums.sort(compare); alert(nums);//1,5,10,15,23
//排序函数简写 function compare(v1,v2){ return v1-v2; } var nums=[1,10,23,5,15]; nums.sort(compare); alert(nums);//1,5,10,15,23
数组的其他方法:
- concat():创建当前数组的一个副本,然后将接收的参数添加到这个副本的末尾
var nums=[1,10,23]; var nums2=nums.concat(); alert(nums2);//1,10,23 var nums3=nums.concat(2,1); alert(nums3);//1,10,23,2,1 var nums4=nums.concat(2,[3,4]); alert(nums4);//1,10,23,2,3,4
- slice():基于当前数组中的一个或多个项创建一个新的数组。
- 该方法接受一个或俩个参数,分别代表返回项的起始和结束位置(不包含结束位置)。
- 如果只有一个参数,则表示从当前位置到结束
- 该方法不会影响原数组
var names=["tom","jerry","lily","rose"]; var names2=names.slice(1,3); alert(names2);//jerry,lily var names3=names.slice(2); alert(names3);//lily,rose var names4=names.slice(-3,-1);//最后一个为-1 alert(names4);//jerry,lily
- splice():可以对数组中元素进行插入、替换、删除操作
- 删除操作:指定俩个参数,要删除的第一项的位置和要删除的项数
- 插入操作:指定三个参数,起始位置,删除0项,插入的数据
- 替换操作:指定三个参数,起始位置,要删除的项数,替换的元素
//删除操作 var names=["tom","jerry","lily","rose"]; var removed=names.splice(0,2);//从0索引开始,删除两位 alert(removed);//tom,jerry alert(names);//lily,rose //插入操作 lily,rose names.splice(0,0,"tom","jerry"); alert(names);//tom,jerry,lily,rose //替换操作 tom.jerry,lily,rose names.splice(1,1,"hankson");//把jerry替换为hankson alert(names);//tom,hankson,lily,rose
- indexOf()和lastIndexOf():根据下表找元素,找不到返回-1
var nums=[1,2,6,45,15,2,15]; var index1=nums.indexOf(2);//2所在的索引 alert(index1);//1 var index2=nums.lastIndexOf(2);//从后面找2的索引 alert(index2);//5 var index3=nums.indexOf(2,1);//从下标为1的地方开始找2的索引,包含1 alert(index3);//1
数组的迭代:
- 普通的for循环
- for..in...
- forEach
var nums=[1,2,6,45,15,2,15]; for(var i=0;i<nums.length;i++){ console.log(nums[i]); }
var nums=[1,2,6,45,15,2,15]; for(var index in nums){ console.log(nums[index]); }
var nums=[1,2,6,45,15,2,15]; nums.forEach(function(item,index,array){ console.log(index+"-"+item);//0-1 1-2 2-6 .... console.log(array);//array=nums });
总结:
- Array类型,数组的声明,构造方法式,字面量式
- 数组的使用:添加元素,增加长度等
- 数组的栈操作,队列操作
- 数组的排序
- 数组的其他方法:concat复制追加,slice截取数组成新数组,splice根据参数的不同具有不同功能
- 数组的迭代:for,for..in..,forEach