本文介绍如下几个方面的内容:
1.如何创建数组
2.如何对数组进行操作(添加,删除,读取)
3.数组常见方法和属性
如何创建一个数组,一般地根据初始化设定简单分为3种:
1.单纯创建数组:
var arr=new Array();
要点:用new关键字创建数组对象Array(),Array()对象是一个本地类,可以用new创建一个对象后使用
2.创建数组的同时规定数组大小:
var arr=new Array(10);//这里就创建了一个初始化大小为10的数组
注意:当使用数组大小操作初始化大小时,数组会自动被撑大,不会像C语言那样发生错误.动态增长是js数组的一个性质.另外,js中支持最大数组长度为4294967295
3.直接初始化:
var arr=new Array("草履虫","爱","毛毛");//这里就直接初始化了数组
或var arr=["草履虫","爱","毛毛"];//括号也可以声明一个数组对象
当然,类似C语言,你也可以定义2维3维和多维的数组,这里不讨论.
数组的属性:length
arr.length返回数组arr的长度,常见于循环中对数组的遍历,比如:
for(var i=0;i<arr.length;i++){
执行部分
}
数组元素的访问: arr[index],其中index表示索引即数组基数,从0开始,共有arr.length个元素.比如: arr[0]访问第一个数组元素,arr[1]访问第二个数组元素....依次类推 数组的操作方法:先概览下下面的这些操作数组常用的方法(13个)
toString(),valueOf(),toLocalString(),join(),split(),slice(),concat(),
pop(),push(),shift(),unshift(),sort(),splice(),reverse()
下面逐一分析这些方法的功能和用法.
1. toString(),valueOf(),toLocalString()
功能:返回数组的全部元素
注:数组名也可以返回整个数组
代码:
var m=["am","bm","cm"];//用括号声明一个数组对象
alert(m.toString());//toString()返回数组对象的所有内容,用逗号分割,即am,bm,cm
alert(m.valueOf());//valueOf()也返回数组对象的所有内容
alert(m.toLocaleString());//toLocaleString()也返回数组对象的所有内容,但有地区语言区别,暂不研究
alert(m);//数组名也返回数组对象的所有内容
2. join()
功能:把数组各个项用某个字符(串)连接起来,但并不修改原来的数组
代码:
var m=["am","bm","cm"];//用括号声明一个数组对象
var n=m.join("---");//用---连接am,bm,cm.
alert(m.toString());//m并没有被修改,返回am,bm,cm
alert(n);//n是一个字符串,为am---bm---cm
3. split()
功能:把一个字符串按某个字符(串)分割成一个数组,但不修改原字符串
代码:
var str="I love maomao,I am caolvchong";
var arr=str.split("o");//按字符o把str字符串分割成一个数组
alert(arr);//输出整个数组
4. slice()
功能:返回某个位置开始(到某个位置结束)的数组部分,不修改原数组
代码:
var m=["am","bm","cm","dm","em","fm"];
var n=m.slice(2);//返回第二个元素bm后面的元素,即cm,dm,em,fm
var q=m.slice(2,5);//返回第二个元素后到第五个元素,即cm,dm,em
alert(n);
alert(q);
5. push()
功能:数组末尾添加一个项
6. pop()
功能:删除数组最后一个项
7. unshift()
功能:数组头添加一个项
8. shift()
功能:删除数组第一个项
9. sort()
功能:数组按字符的ASCII码进行排序,修改数组对象
注:即便是数字数组,也将转化为字符串来进行比较排序
代码:
var m=["am","fm","gm","bm","em","dm"];
m.sort();//按字母序排序
alert(m);
10. concat()
功能:在数组尾添加元素,但不修改数组对象
代码:
var m=["am","bm"]
var n=m.concat("cm");//添加一项cm,并且赋予新数组对象
alert(m);//原数组没有被修改
alert(n);//输出新数组对象
11. splice()
功能:在数组的任意位置进行添加,删除或者替换元素,直接修改数组对象
细节:
splice()有三个参数或三个以上参数,前两个是必须的,后面参数是可选的
进行添加:splice(起始项,0,添加项)
进行删除:splice(起始项,要删除的项个数)
进行替换:splice(起始项,替换个数,替换项) 这个其实是添加删除的共同结果
代码:
var m=["am","bm"]
m.splice(1,0,"fm","sm");//在第一项后面添加fm和sm,返回am,fm,sm,bm
alert(m);
m.splice(2,1);//删除第二项后面一项(即第三项sm,返回am,fm,bm)
alert(m);
m.splice(2,1,"mm");//替换第二项后面一项(即第三项,返回am,fm,mm)
alert(m);
12. reverse()
功能:该方法能将数组的内容反转
代码:
<script type="text/javascript">
var a,aa;
a = new Array(2,4,6,8,10);
aa = a.reverse();
document.write (aa);
</script>
该示例中,首先声明了两个变量a和aa;然后定义a为数组,并赋值给a;然后用reverse方法将数组a的内容反转,并赋值给变
量aa;最后用document.write显示数组aa的值。
注意:splice()与delete比较
var arr=['a','b','c'];
若要删除其中的'b',有两种方法:
1.delete方法:delete arr[1]
这种方式数组长度不变,此时arr[1]变为undefined了,但是也有好处原来数组的索引也保持不变,此时要遍历数组元素可以才用
for(index in arr)
document.write('arr['+index+']='+arr[index]);
这种遍历方式跳过其中undefined的元素
* 该方式IE4.o以后都支持了
2.数组对象splice方法:arr.splice(1,1);
这种方式数组长度相应改变,但是原来的数组索引也相应改变
splice参数中第一个1,是删除的起始索引(从0算起),在此是数组第二个元素
第二个1,是删除元素的个数,在此只删除一个元素,即'b';
此时遍历数组元素可以用普通遍历数组的方式,比如for,因为删除的元素在
数组中并不保留
* 该方法IE5.5以后才支持
值得一提的是splice方法在删除数组元素的同时,还可以新增入数组元素
比如arr.splice(1,1,'d','e'),d,e两个元素就被加入数组arr了
结果数组变成arr:'a','d','e','c'
JavaScript通过设置数组的length属性来截断数组是惟一一种缩短数组长度的方法.如果使用delete运算符来删除数组中元素,虽然那个元素变成未定义的,但是数组的length属性并不改变两种删除元素,数组长度也改变的方法.
/*
* 方法:Array.remove(dx)
* 功能:删除数组元素.
* 参数:dx删除元素的下标.
* 返回:在原数组上修改数组
*/
//经常用的是通过遍历,重构数组.
Array.prototype.remove=function(dx)
{
if(isNaN(dx)||dx>this.length){return false;}
for(var i=0,n=0;i<this.length;i++)
{
if(this[i]!=this[dx])
{
this[n++]=this[i]
}
}
this.length-=1
}
a = ['1','2','3','4','5'];
alert("elements: "+a+"nLength: "+a.length);
a.remove(0); //删除下标为0的元素
alert("elements: "+a+"nLength: "+a.length);
/*
* 方法:Array.baoremove(dx)
* 功能:删除数组元素.
* 参数:dx删除元素的下标.
* 返回:在原数组上修改数组.
*/
//我们也可以用splice来实现.
Array.prototype.baoremove = function(dx)
{
if(isNaN(dx)||dx>this.length){return false;}
this.splice(dx,1);
}
b = ['1','2','3','4','5'];
alert("elements: "+b+"nLength: "+b.length);
b.baoremove(1); //删除下标为1的元素
alert("elements: "+b+"nLength: "+b.length);
我们知道,在IE5或更低的版本中,JavaScript的Array(数组)对象并未提供现成的删除数组元素的方法。在IE5.5+的版本中,虽然有splice方法,但是并不是删除某一项(或几项),而仅仅是将某一项(或几项)的值清除,也就是说该项仍然存在,数组的长度并没有改变。
事实上,我们可以自己为数组增加一个删除方法(注意,这里指的是将数组的某一项真正的从数组成员中移除)。或许你会想到用循环来为数组重新赋值,这样做当然可以,但效率很低。
下面我们介绍利用Array对象的两个方法slice、concat来自定义删除数组的方法。
具体代码如下,请注意里面的注释。
--------------------------------------------------------------
Array.prototype.del=function(n) { //n表示第几项,从0开始算起。
//prototype为对象原型,注意这里为对象增加自定义方法的方法。
if(n<0) //如果n<0,则不进行任何操作。
return this;
else
return this.slice(0,n).concat(this.slice(n+1,this.length));
/*
concat方法:返回一个新数组,这个新数组是由两个或更多数组组合而成的。
这里就是返回this.slice(0,n)/this.slice(n+1,this.length)
组成的新数组,这中间,刚好少了第n项。
slice方法: 返回一个数组的一段,两个参数,分别指定开始和结束的位置。
*/
}
//我们来试一试这个自己增加的方法
var test=new Array(0,1,2,3,4,5);
test=test.del(3); //从0算起,这里也就是删除第4项。
alert(test);
------------------------------------------------------------------------------