数组数据的组合
数组是最简单的数据储存结构,在我们几乎所有的编程语言都原生支持数组类型,js里也是支持数组的。
数组写法示例
1、var arr1=["a","b","c","d","e","f"];
2、var arr2=[6,2,4,5,8,0,2,1,3,5,6];
数组必须写在[ ]中,并且数组和对象相同的是它们都是通过引用的方式使用里面的内容的,所以要给数组建立一个引用的地址,如arr1、arr2
在创建数组是我们要注意
1、每个数据都使用逗号分隔
2、数据可以是任何类型
3、数据顺序排列
4、可以重复
数组和对象一样都是引用数据类型
数组中的数据按照顺序从0开始排列的,从0开始,我们把这个叫做索引,也叫做下标
把数组中的每个相对应的数据叫做元素,或者简称元
arr1[0]="z";
console.log(arr1);
在这个部分的0叫做下标,后面添加的"z"叫做元素 ,此时整个arr1[0]叫做下标变量,上边的这个写法可以更改数组的第0项为z
数组的新建方式
1、字面量创建
var arr=[4,5,3,6,2,1];
2、构造函数创建
var arr1=new Array(4,5,3,6,2,1);
如果通过数组的构造函数创建数组,参数仅有1个,且这个参数是正整数,则表示新建一个具备该正整数长度的空数组,里面有这个长度的若干空元素
var arr=new Array(6); Array(6)里面这个数字就是数组的长度,没有元素
如果是负数或者小数时,报错
var arr2=new Array(-5);
var arr2=new Array(3.5);
如果输入的不是数值,是其他类型时,这个数据就会作为该数组的第0个元素,长度为1
var arr2=new Array("a");
数组的长度length
在上边提到过几次数组的长度,数组的长度我们可以通过length来查看
如下方是个数组
var arr=[1,2,3,4,5];
此时我们就可以用arr.length来查看数组的长度
console.log(arr.length);
我们把arr.length打印出来这时我们就可以在控制台查看数组的长度
arr.length除了可以查看数组的长度还可以更改数组的长度
arr.length=3;
此时数组的长度被修改为3,修改为3后,后面的元素将会被删除,只保留前三个,如果内容小于3时,后面将会用空元素填充,直到数组长度为3
除了设置数组长度和查看数组长度外arr.length还可以用来清空数组设置arr.length=0;这样整个数组清空。
在此顺便提一嘴元素的个数就是数组的长度
数组的最大下标是数组的长度-1(元素个数-1);
因为数组是从0开始排序计算,而长度是从1开始排序计算,所以数组的最大下标是数组的长度-1
数组的使用
在数组中所有的下标都会转换为number,如果不能转换为number的(也就是转换后是NaN的),就会默认添加对象的属性名
数组的长度,仅记录下标的个数,不包含属性数量
数组不可以使用点语法获取下标变量,但是数组中如果有属性可以使用点语法取属性
遍历数组
循环遍历
var arr = [5, 2, 7, , 4, 9, 6];
arr["a"] = 10;
将这个数组循环一遍
for(var i=0;i console.log("索引值"+i+":"+arr[i]); i为第几个 arr[i]为数值第i个的值 } var arr=[a:1,b:2,c:3]; for(var prop in obj){ console.log(arr[prop ]); prop就是键,属性名 arr[prop]就是当前prop属性的值,属性值 } var arr=[a:1,b:2,c:3]; var o=[]; for(var prop in obj){ o[prop] = obj[prop]; 属性 属性值 } console.log(o); 注意数组的循环是根据下标的数字从0开始循环到最大下标,有序对象是循环所有属性名,无序对象的属性遍历是根据对象属性名添加的顺序 当使用for in遍历时,会将所有属性包括下标都会转为字符型 数组的下标,如果给让的是字符,会转换成数值 for in不会遍历空元素,for会遍历空元素 for in可以遍历到数组的属性,for只能遍历数组所有下标,不能遍历属性 arr.push(6);//在数组的尾部插入一个新元素 arr.push(6,7,8);//在数组的尾部插入多个新元素 var a=arr.push(6,7,8);//通过添加到尾部元素后返回数组的新长度 arr.unshift(0);//在数组的头部插入一个新元素 arr.unshift(-3,-2,-1,0);//在数组的头部插入多个新元素 var a=arr.unshift(-3,-2,-1,0);//返回数组的新长度 arr.pop();//pop中没有参数,删除数组的最尾部一个元素 var a=arr.pop();//pop删除数组的最尾部一个元素,并且将被删除的元素返回 arr.length--; //等同 速度更快,但是不会返回被删除的元素 arr.pop();//速度慢,但是会返回被删除的元素 arr.shift();//将数组的第一个元素删除 var a=arr.shift();//将数组的第一个元素删除,并且返回这个被删除的元素for in遍历
同时for in也可以复制数组
for in和for的区别
push在数组尾部添加一个或者多个元素,并且返回数组的新长度
unshift在数组头部添加一个或者多个元素,并且返回数组的新长度
pop删除数组尾部的最后一个元素,并且将这个被删除的元素返回
arr.pop();与arr.length--;的区别
shift()删除数组的第一个元素,并且返回被删除的元素
注意不管删除还是添加都会改变数组的长度
为了方便理解我们可以用js重构这些
重构push
var arr = [1, 2, 3, 4, 5];
function pushs(arr,tian) {
arr[arr.length] = tian;
return chang = arr.length;
// console.log(arr);
}
var chang=pushs(arr,3);
console.log(chang,arr)
var arr1=[1,2,3,4,5];
var kong=[];
console.log("原始数组"+arr1+"数组长度"+arr1.length);
push1(arr1,[6,7,8,9])
function push1(arr1,kong){
for(var i=0;i arr1[arr1.length]=kong[i] } console.log("新数组"+arr1+"长度"+arr1.length) } var arr=[1,2,3,4,5,6,7]; function pops(arr){ var item=arr[arr.length-1]; arr.length--; return item; } var item=pops(arr); // arr.pop(); console.log(arr,item); var arr=[1,2,3,4,5,6,7]; function unshifts(arr,item){ var maxIndex=arr.length-1; for(var i=maxIndex;i>=0;i--){ arr[i+1]=arr[i]; } arr[0]=item; return arr.length; } var n=unshifts(arr,5); console.log(n,arr); */ var arr = [3, 2, 3, 4, 5, 6, 7, 8]; function shifts() { var fan = arr[0]; for (var i = 0; i < arr.length - 1; i++) { arr[i] = arr[i + 1]; } arr.length--; return fan; } var fan = -shifts(arr); console.log(arr, fan); var arr=[1,2,3,4]; var arr1=[5,6,7,8]; 数组的合并,合并后会返回一个新数组,原来的两个数组不会变化 var arr2=arr.concat(arr1); 数组除了可以合并数组,也可以合并元素,将多个元素与原数组合并,返回新数组 var arr3=arr.concat(0,-1,-2); concat既可以合并元素,也可以合并数组 var arr4=arr.concat(0,arr1,["A","B"]); 如果直接使用concat,就可以完成数组的复制功能 var arr5=arr.concat(); var arr=[1,2,3,4,5]; 将数组合并为字符串返回,默认使用,连接 var str=arr.join(); 在这里join的参数是字符串的连接符 var str=arr.join("|"); ""作为连接符,会将数组元素首尾相连成为字符串 var str=arr.join(""); var arr=[1,2,3,4,5,6]; var arr1=[7,8,9] merge() function merge(){ //arr的长度 var q=arr.length //arr1的长度 var w=arr.length for(i=0;i // 在arr后面添加arr1的内容 arr[q+i]=arr1[i] } //返回长度 return m=q+w } console.log(arr,m) var arr = [1, 2, 3, 4, 5]; function joins(arr, separ) { if (separ === undefined) { separ = ","; } var str="" for (var i = 0; i < arr.length - 1; i++) { str += arr[i] + separ; } str += arr[i]; return str; } var str = joins(arr, "|"); console.log(str); 这个方法可以从指定的位置删除给定数量的元素,并且在这个位置插入需要的元素并且返回被删除的元素组成的新数组 arr.splice(从什么位置开始,删除多少个元素,要插入的元素); 没有任何参数时,返回一个空数组 var arr1=arr.splice(); 第一个参数是0,表示从第0位开始,第二个参数删除多少个没有填,意味着删除到尾部 var arr1=arr.splice(0);//将所有数据转移到新数组 从第0位开始删除3个元素,返回到新数组arr1 var arr1=arr.splice(0,3); 从第几位开始可以是负数,从后向前数(倒数),因为没有给要删除的数量,因此删除到尾部 var arr1=arr.splice(-2); 从数组的第0位开始,删除1个元素,并且在这个位置插入一个元素 -1,替换 var arr1=arr.splice(0,1,-1); 数组的最后一位替换位0 var arr1=arr.splice(-1,1,0); 将数组中第二位开始两位元素替换为10,11 var arr1=arr.splice(2,2,10,11); 在数组的第二位插入一个元素-1 arr.splice(2,0,-1); arr.slice(从什么位置开始,到什么位置之前结束) 第二个参数不写,默认截取到尾部 只能从前向后截取 例: var arr1=arr.slice();//复制数组arr var arr1=arr.slice(0); //复制数组 var arr1=arr.slice(3);//从第三位截取到尾部复制 var arr1=arr.slice(-2);//从倒数第二位开始截取到尾部 var arr1=arr.slice(-3,-1);//从倒数第三位到倒数第一位 重构pop
重构unshift
重构shift
concat数组的合并,合并后会返回一个新数组,原来的两个数组不会变化
join就是将数组的每个元素以指定的字符连接形成新字符串返回
重构concat
重构join的方法
toString可以直接将数组转换为字符串
splice这个方法可以从指定的位置删除给定数量的元素,并且在这个位置插入需要的元素并且返回被删除的元素组成的新数组
slice按指定位置截取复制数组的内容