视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Javascript数组及其操作
2025-10-02 12:38:35 责编:小OO
文档
Javascript数组及其高级操作

如何创建一个数组,一般地根据初始化设定简单分为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        match = tester(this[i], 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    return this;

};使用示例:

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 + "
"); //2,8,1,2,0

document.write(newArray2 + "
"); //7,5,1,9

oldArray = [ "aa", "bbbb", "abcdefg", "ccccc", "111121111", "999999999" ];

var newArray3 = oldArray.grep(/(\\w)\\1{4,}/);

document.write(newArray3 + "
"); //ccccc,999999999典型jQuery风格的代码:

var obj = document.createElement_x("ul");

obj.innerHTML = '

  • AAAAAA
  • BBBBBB
  • CCCCCC
  • DDDDDD
  • ';

    document.body.appendChild(obj);

    window.setInterval(function(){

        //把NodeList转换成数组

        var liList = obj.getElementsByTagName_r("li");

        var liArray = [];

        for(var i=0; i    //示例grep的使用

        liArray

            .grep('e.style["display"]=="none"', 'e.style["display"] = "";', true)

            .map(function(e, i){ e.style["display"] = "none"; });

    }, 1500);下载本文

    显示全文
    专题