如何创建一个数组,一般地根据初始化设定简单分为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("love这里就直接初始化了数组
或var arr=["happy括号也可以声明一个数组对象
当然,类似C语言,可以定义2维3维和的数组,例如:
数组的属性:length
arr.length返回数组arr的长度,常见于循环中对数组的遍历,比如:
for(var i=0;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() 下面逐一分析这些方法的功能和用法. toString(),valueOf(),toLocalString(): 功能:返回数组的全部元素 注:数组名也可以返回整个数组 代码: var m=["am用括号声明一个数组对象 alert(m.toString());//toString()返回数组对象的所有内容,用逗号分割,即am,bm,cm alert(m.valueOf());//valueOf()也返回数组对象的所有内容 alert(m.toLocaleString());//toLocaleString()也返回数组对象的所有内容,但有地区语言区别,暂不研究 alert(m);//数组名也返回数组对象的所有内容 join(): 功能:把数组各个项用某个字符(串)连接起来,但并不修改原来的数组 代码: var m=["am用括号声明一个数组对象 var n=m.join("---");//用---连接am,bm,cm. alert(m.toString());//m并没有被修改,返回am,bm,cm alert(n);//n是一个字符串,为am---bm---cm split(): 功能:把一个字符串按某个字符(串)分割成一个数组,但不修改原字符串 代码: var str="I love maomao,I am caolvchong"; var arr=str.split("o");//按字符o把str字符串分割成一个数组 alert(arr);//输出整个数组 slice():返回某个位置开始(到某个位置结束)的数组部分,不修改原数组 代码: var m=["am var n=m.slice(2);//返回第二个元素bm后面的元素,即cm,dm,em,fm var q=m.slice(2,5);//返回第二个元素后到第五个元素,即cm,dm,em alert(n); alert(q); 数组对象的栈操作: push():数组末尾添加一个项 pop():删除数组最后一个项 代码: var m=["am m.push("gm");//在数组末尾添加元素gm alert(m); m.pop();//删除数组最后一个元素gm alert(m); 数组对象的队列操作: unshift():数组头添加一个项 shift():删除数组第一个项 代码: var m=["am m.unshift("gm");//在数组第一个元素位置添加元素gm alert(m); m.shift();//删除数组第一个元素gm alert(m); sort():数组按字符的ASCII码进行排序,修改数组对象 注:即便是数字数组,也将转化为字符串来进行比较排序 代码: var m=["am m.sort();//按字母序排序 alert(m); concat():在数组尾添加元素,但不修改数组对象 代码: var m=["am var n=m.concat("cm");//添加一项cm,并且赋予新数组对象 alert(m);//原数组没有被修改 alert(n);//输出新数组对象 splice():在数组的任意位置进行添加,删除或者替换元素,直接修改数组对象 细节: splice()有三个参数或三个以上参数,前两个是必须的,后面参数是可选的 进行添加:splice(起始项,0,添加项) 进行删除:splice(起始项,要删除的项个数) 进行替换:splice(起始项,替换个数,替换项) 这个其实是添加删除的共同结果 代码: var m=["am m.splice(1,0,"fm在第一项后面添加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); JavaScript数组操作函数 join(delimiter): 把数组中各个元素使用分隔符(delimiter)拼成字符串 concat(array1, array2, ...): 合并数组,对原数组不影响,只是返回合并后的新数组 pop(): 删除并返回最后一个元素 push(element1, element2, ...): 在数组末尾追加元素 shift(): 删除并返回第一个元素 unshift(element1, element2, ...): 在数组开始位置添加元素 reverse(): 将数组元素顺序首尾反转 sort(function): 给数组排序 如果不给参数,默认按字符排序(所有元素是数字也不会按数字排序的) 参数必须是一个函数,类似function(a, b) {},在函数中判断a, b的大小,a>b返回正数,aslice(start, end): 返回一个新的数组,将start开始,到end结束(不包括end)之间的元素复制到新数组中 splice(start, count, replaceElement1, replaceElement2, ...): 删除或者替换数组元素,从start开始,对count个元素进行删除或替换 如果提供replaceElement参数则进行替换,否则进行删除操作,被替换的元素个数和replaceElements的个数不必相等 返回一个数组,包含被删除或替换掉的元素 判断是否数组的方法 var arrayVar = ["aaa", "bbb", "ccc"]; var nonArrayVar = { length:4, otherAttribute:"attr" }; document.write(arrayVar.constructor==Array); document.write(" document.write(nonArrayVar.constructor==Array); 结果是true, false grep、map Perl语言带出来的东西,jQuery实现selector时用了这种方式 grep 对数组的grep操作,指类似这样的代码: Array newArray = grep(condition, oldArray),这个操作将对oldArray数组的每个元素进行遍历,如果当前处理元素符合条件condition,则加入到返回数组中 jQuery中的grep类似这样: function( elems, callback),elems是DOM元素集合,callback是实现selector的一些表达式函数,如果callback返回true则表明当前处理的元素符合selector表达式 map 与grep不同的是,map不进行条件判断,只是对数组中每个元素执行指定的操作,就是将一个循环过程进行改装 喜欢动态语言风格的,可以给数组加个grep和map方法,例如: Array.prototype.grep = function(condition, operation, inverse){ if(arguments.length<1) return []; var tester; if( typeof condition=="function" ) tester=condition; else if( condition.constructor==RegExp ) tester = function(e, i) { return condition.test(e); }; else if( typeof condition=="string" ) try{ tester = eval_r( "false||function(e, i){ return " + condition + "; }" ); }catch(e) { } else tester = function(e, i) { return false; }; if(!tester) return []; var command; if( typeof operation=="function" ) command=operation; else if(typeof operation=="string") try{ command = eval_r( "false||function(e, i){ " + operation + "; return e; }" ); }catch(e) { } if(typeof command!="function") command=function(e, i) { return e; }; var result = [], match, t; for(var i=0; i if(match) t = command(this[i], i); if(match && !inverse && t!=null) t.constructor==Array ? result.concat(t) : result.push(t); else if(!match && inverse) result.push(this[i]); } return result; }; Array.prototype.map = function(callback){ if(!callback || typeof callback!="function") return this; for(var i=0; i };使用示例: var oldArray = [ 2, 7, 8, 5, 1, 9, 2, 6, 0 ]; var newArray1 = oldArray.grep("i%2==0"); //返回索引为偶数的所有元素 var newArray2 = oldArray.grep("e%2==1"); //返回数组元素的值为奇数的所有元素 document.write(newArray1 + " document.write(newArray2 + " oldArray = [ "aa", "bbbb", "abcdefg", "ccccc", "111121111", "999999999" ]; var newArray3 = oldArray.grep(/(\\w)\\1{4,}/); document.write(newArray3 + " var obj = document.createElement_x("ul"); obj.innerHTML = ' document.body.appendChild(obj); window.setInterval(function(){ //把NodeList转换成数组 var liList = obj.getElementsByTagName_r("li"); var liArray = []; for(var i=0; i liArray .grep('e.style["display"]=="none"', 'e.style["display"] = "";', true) .map(function(e, i){ e.style["display"] = "none"; }); }, 1500);下载本文
");
"); //2,8,1,2,0
"); //7,5,1,9
"); //ccccc,999999999典型jQuery风格的代码: