使用数组
创建数组
- 通过new创建数组
var arr=new Array(100,true,"hello");//数组中的元素不必是同一类型
- 省略new运算符创建数组
var arr= Array(100,true,"hello");
【注】上述两种方法,传入参数只有一个并且是数字时,直接声明这么长的一个数组.
var arr= Array(10);//声明长度为10的数组,该数组有10个内存空间
- 数组常量进行赋值(一般使用[])
var arr= [100,true,"hello"]; var arr= [10];//arr中只有一个元素,值为10
访问数组元素
访问数组的元素: 数组[下标],下标从0开始
var arr= [100,true,"hello"];
for(var i=0;i<arr.length;i++){
document.write(arr[i] + "<br/>");
}
数组方法
查找元素
indexOf(): 查找传进来的参数在目标数组中是否存在。如果目标数组包含该参数,就返回该元素在数组中的索引;如果不包含,就返回-1。
var arr=[10,20,30,40,50,20,60];
var index=arr.index[20];
alert(index);//1
var index=arr.index[20,2];//第一个参数表示要查找的元素,第二个参数表示查找的起始位置
alert(index);//5
【注】如果数组中包含多个相同的元素,indexof()函数总是返回第一个与参数相同的元素的下标。
将数组转为字符串
- join()
var arr=[10,20,30]; var res=arr.join("===xxx"); alert(arr);//10,20,30 alert(res);//10===xxx20===xxx30
- toString()
var name=["Alice","Bob","Mike"]; var nameStr=name.toString(); alert(nameStr);//Alice,Bob,Mike
【注】两种方法都返回一个包含数组所有元素的字符串,各元素之间用逗号隔开。
在已有数组的基础上生成新数组
- concat() :合并多个数组创建一个新数组
var arr1=[10,20,30]; var arr2=[50,60,70]; var newArr=arr1.concat(arr2,"hello",true); alert(newArr);//10,20,30,50,60,70,hello,true alert(newArr.length);//8 alert(arr1);//10,20,30
- splice() :截取一个数组的自己创建一个新数组
//增加 var arr=[10,20,30,40,50,60]; var res=arr.splice(2,0,"hello",true); alert(arr);//10,20,hello,true,30,40,50,60 alert(res);//0 //删除 var arr=[10,20,30,40,50,60]; var res=arr.splice(2,2);//第一个参数师姐去的起始索引,第二个参数是截取的长度 alert(arr);//10,20,50,60 alert(res);//30,40 //修改(先删除后增加) var arr=[10,20,30,40,50,60]; var res=arr.splice(2,2,70,80); alert(arr);//10,20,70,80,50,60 alert(res);//30,40
添加元素
- push() :将一个元素添加到数组末尾,返回新数组的长度
var arr=["北京","上海","广州"]; var res=arr.push("深圳","天津","成都"); alert(arr);//北京,上海,广州,深圳,天津,成都 alert(res);//6
- unshift() :将一个元素添加到数组开头,返回新数组的长度
var arr=["唐朝","元朝","明朝"]; var res=arr.unshift("隋朝","商汤"); alert(arr);//隋朝,商汤,唐朝,元朝,明朝 alert(res);//5
删除元素
- pop() :删除数组末尾的元素,返回删除的元素
var arr=["北京","上海","广州"]; var res=arr.pop(); alert(res);//广州 alert(arr);//北京,上海
- shift() :删除数组开头的元素,返回删除的元素
var arr=["唐朝","元朝","明朝"]; var res=arr.shift(); alert(res);//唐朝 alert(arr);//元朝,明朝
元素排序
- reverse():将数组中元素的顺序进行翻转
var arr=[10,20,30]; alert(arr.reverse());//30,20,10
- sort():对数组中的元素进行大小排序
//数值从小到大排序 var arr=[10,20,5]; arr.sort(function(value1,value2)){ return value1-value2; } alert(arr);//5,10,20 //数值从大到小排序 var arr=[10,20,5]; arr.sort(function(value1,value2)){ return value2-value1; } alert(arr);//20,10,5
迭代器方法
对数组中的每一个元素应用一个函数,可以返回一个值、一组值或者一个新数组。
不生成新数组的迭代器方法
- forEach():接受一个函数作为参数,对数组中的每个元素使用该函数
var arr=[10,20,30,40,50,60]; arr.forEach(function(item,index,arr){ //item当前遍历到的元素 //index当前遍历到的元素下标 //arr数组本身 document.write(item+","+index+"<br/>"); }); 运行结果: 10,0 20,1 30,2 40,3 50,4 60,5
- every():接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数均返回true,则该方法返回true。
var arr=[10,20,30,40,50,60]; var res=arr.every(function(item,index,arr){ //过滤条件 return item > 20; }); alert(res);//false alert(arr);//10,20,30,40,50,60
- some():接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。只要有一个元素使得该函数返回true,则该方法返回true。
var arr=[10,20,30,40,50,60]; var res=arr.some(function(item,index,arr){ //过滤条件 return item > 20; }); alert(res);//true alert(arr);//10,20,30,40,50,60
- reduce():接受一个函数,返回一个累加值。
var arr=[10,20,30,40,50,60]; var res=arr.reduce(function(prev,next,index,arr){ //prev 第一次是下标为0的元素,第二次开始 上一次遍历return的值 //next 从下标1开始,当前遍历到的元素 //arr 数组本身 alert(prev+","+next);//10,20;30,30;60,40;100,50;150,60;210 return prev+next; }); alert(res);
生成新数组的迭代器方法
- map():映射,将计算后的数据存在与原数组下标相同的新数组中
var arr=[10,20,30,40,50,60]; var newArr=arr.map(function(item){ //映射关系 return item * 1.3; }); alert(newArr);//13,26,39,52,65,78 alert(arr);//10,20,30,40,50,60
- filter()
var arr=[10,20,30,40,50,60]; var newArr=arr.filter(function(item,index,arr){ //过滤条件 return item > 20; }); alert(newArr);//30,40,50,60 alert(arr);//10,20,30,40,50,60
深拷贝和浅拷贝
//浅拷贝:把一个数组赋给另一个数组时,修改原数组的值,新数组的值也会发生变化。
var nums=[1,2,3];
var sameNums=nums;//
nums[0]=100;
console.log(nums);//100,2,3
console.log(sameNums);//100,2,3
//深拷贝:将原数组中的每一个元素都复制一份到新数组中
var nums=[1,2,3];
var sameNums=[];
for(var i in nums){
sameNums[i]=nums[i];
}
nums[0]=100;
console.log(nums);//100,2,3
console.log(sameNums);//1,2,3