javascript 数组

来源:互联网 发布:在线聊天室网页源码 编辑:程序博客网 时间:2024/05/16 23:54
  1. 创建数组
    var empty=[];//创建一个空数组
    var primes=[2,,3,5,7,11,];//一个有5个值的数组
    var undefs=[,,];//数组中省略的2元素将被赋值为undefined,数组直接量语法允许有可选的结尾逗号,所以[, ,]是两个元素
    var a=new Array(); //创建一个没有任何元素的空数组
  2. 稀疏数组 包含从0开始的不连续索引的数组
    a=new Array(5);//数组中没有元素,但是长度为5
    a[1000]=0;//赋值添加一个元素,但是设置length为1001
var a1=[ , , ,];//数组是[undefined,undefined,undefined]var a2=new Array(3);//数组中没有元素0 in a1   //true a1在索引0处有一个元素0 in a2   //false   a2在索引0处没有元素

当省略数组直接量中的值时,这时得到的数组也是稀疏的,省略掉的值是不存在的

var a1=[,];//此时数组没有元素,长度是1var a2=[undefined];//数组包含一个值为undefined的元素0 in a1  //false a1在索引0处没有元素0 in a2  //true  a2在索引0处有一个值为undefined的元素

3.数组长度

a=[1,2,3,4,5];a.length=3;//现在数组为[1,2,3]a.length=0;//删除所有的元素,a为[]a,length=5;//长度为5,但是没有元素,就像new Array(5)

4.数组元素的添加和删除
a=[];
a[0]=”zero”;//向数组中添加元素

a=[];a.push("zero") //在末尾添加一个元素a=["zero"]a.push("one","two")//再添加两个元素 a=["zero","one","two"]

使用delete,从数组中删除一个元素

//使用delete删除数组元素a=[1,2,3];delete a[1];//a在索引1的位置不再有元素1 in a  //false 数组索引1并未在数组中定义a.length   //3  delete操作不影响数组长度

pop 数组长度减少1并返回删除元素的值
shift() 从数组头部删除一个元素,将所有元素下移到比当前索引低的地方
5. 数组的遍历

var keys=Object.keys(0);//获取o对象属性名组成的数组var values=[];for (var i=0;i<keys.length;i++){    var key=keys[i];//获得索引处的键值    values[i]=o[key];//在values数组中保存属性值    }//跳过null undefined 和不存在的元素for (var i=0;i<a.length;i++){    if (! a[i])  continue;    //循环体    }//跳过undefined和不存在的元素for (var i=0;i<a.length;i++){    if(a[i]===undefiend)  continue;    //循环体    }//只跳过不存在的元素for (var i=0;i<a.length;i++){    if (!(i in a))  continue;//跳过不存在的元素    //循环体    }// for/in 循环处理稀疏数组,循环每次将一个可枚举的属性名赋值给循环变量,不存在的索引将不会遍历到 for (var index in a){     var value=a[index];     //要执行的语句     }

for/in能枚举继承的属性名,因此不应该使用for/in循环,除非使用额外的检测方法过滤不想要的属性。

for (var i in a){    if (!a.hasOwnProperty(i))  continue;//跳过继承的属性    //循环体    }for (var i in a){    //跳过不是非负整数的i    if (String(Math.floor(Math.abs(Number(i)))))!==i   continue;    }

forEach 遍历数组

//forEach 遍历数组var data=[1,2,3,4,5];var sumofSquares=0;data.forEach(function (x){                       sumofSquares+=x*x;                          });sumofSquares //55

6.二维数组实现九九乘法表

//数组实现九九乘法表var table=new Array(10);    //表格有10行for(var i=0;i<table.length;i++){    table[i]=new Array(10);  //每行有10列    }for (var row=0;row<table.length;row++){    for(col=0;col<table[row].length;col++){        table[row][col]=row*col;        }    }var product=table[5][7];//35

7.数组的方法
Array.join() 方法是将数组中所有元素转化为字符串并连接在一起,返回最后生成的字符串,默认分隔符是逗号。

//joinvar a=[1,2,3];a.join();//"1,2,3"a.join(" ");//"1 2 3"a.join("");//"123"var b=new Array(10);//长度为10的空数组b.join(‘-’)  //---------9个连字号组成的字符串

Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组

var a=[1,2,3];a.reverse().join()  //"3,2,1"并且a现在是[3,2,1]

Array.sort()方法将数组中的元素排序并返回排序后的数组。没有参数值,数组元素以字母表顺序排序。如果数组包含undefined元素,它们会被排到数组的尾部。

var a=new Array("banana","cherry","apple");a.sort();var s=a,join(",");//s="apple,banana,cherry"//用数值大小而非字母表顺序进行数组排序var a=[33,4,111,222];a.sort();//字母表顺序  111,222,33,4a.sort(function (a,b){                 return a-b;//数值顺序 4,33,222,111                 });a.sort(function (a,b){return b-a});//数值大小相反的顺序//字符串不区分大小写的字母表排序a=['ant','Bug','cat','Dog']a.sort();  //区分大小写排序 ['Bug','Dog','ant','cat']a.sort(function (s,t){                 var a=s.toLowerCase();                 bar b=t.toLowerCase();                 if (a<b)  return -1;                 if (a>b)  return 1;                 return 0;                 });//['ant','Bug','cat','Dog']

Array.concat()创建并返回一个新数组,它的元素包括调用conact()的原始数组元素和concat()的每个参数

var a=[1,2,3];a.concat(4,5) //返回[1,2,3,4,5]a.concat([4,5]);  //[1,2,3,4,5]a.concat([4,5],[6,7])//[1,2,3,4,5,6,7]a.concat(4,[5,[6,7]])  //[1,2,3,4,5,[6,7]]

Array.slice()返回指定数组的一个子数组,返回第一个参数开始的位置,到第二个参数之间的元素(但不包含第二个元素指定的位置)。如果只有一个参数,则从开始位置到数组结尾。如果出现了负数,表示相对于数组中最后一个元素的位置。

var a=[1,2,3,4,5];a.slice(0,3);//返回[1,2,3]a.slice(3);//返回[4,5]a.slice(1,-1)//返回[2,3,4]a.slice(-3,-2);返回[3]

Array.splice()方法是在数组中插入或删除元素的通用方法。splice()会修改调用的数组。插入或者删除之后,数组元素会根据需要增加或减少它们的索引值。
第一个参数指定了插入或删除的起始位置,第二个元素指定了删除元素的个数。如果省略了第二个参数,从起始点开始到数组结尾所有元素都被删除。返回一个由删除元素组成的数组,或者如果没有删除返回一个空数组。

var a=[1,2,3,4,5,6,7,8];a.splice(4);//返回[5,6,7,8]  a是[1,2,3,4]a.splice(1,2);//返回[2,3]  a是[1,2]//从第三个参数开始指定插入的元素var a=[1,2,3,4,5];a.splice(2,0,'a','b');//返回[],a是[1,2,'a','b',3,4,5]a.splice(2,2,[1,2],3)//返回是['a','b'];a是[1,2,[1,2],3,3,4,5]

push 在数组尾部添加一个或者多个元素,并返回数组新的长度
pop删除数组最后一个元素,减少数组长度并返回它删除的值
unshift() 在数组的头部添加一个或者多个元素,移动其他的元素,返回数组的新长度
shift() 删除数组第一个元素并将其返回
8. 数组的新方法
数组方法第一个参数接收一个函数,并对数组每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用传递的函数。多书情况下,调用提供的函数使用三个参数:数组元素,元素的索引和数组本身。第二个参数是可选的。
forEach()方法从头至尾遍历数组,为每个元素调用指定的函数传递的函数作为forEach()的第一个参数。然后forEach()使用三个参数调用该函数:数组元素。元素的索引和数组本身。

var data=[1,2,3,4,5];var sum=0;data.forEach(function (value){sum+=value;});//元素累加sum//为每个元素值自加1data.forEach(function(v,i,a) {a[i]=v+1;}) //v是数组元素  i是索引值  a是数组本身data  //[2,3,4,5,6]//forEach无法在所有元素都传递给调用函数之前终止遍历,提前终止可以使用抛出异常function forEacha,f,t){    try {a.forEach(f,t);}    catch(e){        if (e===foreach.break)  return;        else throw e;        }    }    foreach.break=new Error("StopIteratiom");

map()调用数组每个元素传递给指定的函数,并返回一个新数组。它不修改调用的数组。如果是稀疏数组,返回的是相同方式的稀疏数组。

a=[1,2,3];b=a.map(function (x){return x*x;});//b是[1,4,9]

filter() 返回调用数组的一个子集。会跳过稀疏数组中缺少的元素,它返回的数组总是稠密的。

a=[5,4,3,2,1];smallvalues=a.filter(function (x) {return x<3});//[2,1]everyother=a.filter(function(x,i) {return i%2==0});//[5,3,1]//压缩稀疏数组的空缺var dense=sparse.filter(function(){return true;});//压缩空缺并删除undefined和null元素a=a.filter(function(x){return x!==undefined&&x!==null;});

every() 和some()方法是数组的逻辑判定。every每一个。some是存在。空数组调用时,every()返回true, some() 返回false
reduce()指定函数将数组元素组合。第一个参数是化简操作的函数,第二是初始值。没有指定初始值时,数组的第一个元素作为初始值。

//reducevar a=[1,2,3,4,5];var sum=a.reduce(function (x,y) {return x+y},0);//数组求和 第一次参数是0和1,返回和1,再次调用参数                                                   //是1和2,返回值是3var max=a.reduce(function(x,y){return (x>y)?x:y;});//求最大值

reduceRight()原理同reduce,只是按照数组索引从高到低
indexOf()和lastindexOf() 搜索指定的元素,返回找到的第一个元素的索引值,或者没有找到返回-1.indexOf()从头开始搜索。lastindexOf()从末尾开始搜索。

//查找数组中所有的x,并返回一个包含匹配索引的数组function findall(a,x){    var results=[];    len=a.length;    pos=0;    while(pos<len){        pos=a.indexOf(x,pos);        if (pos===-1)  break;//没有找到 完成搜索        results.push(pos);//数组存储        pos=pos+1;//从下一个位置开始搜索        }        return results;    }

9 数组的类型

Array.isArray([])  //trueArray.isArray({})  //false//ECMAScript 3 中isArray()函数var isArray=Function.isArray||function(o){    return typeof o==="object"&&    Object.prototype.toString.call(o)==="[object Array]";    }

10 字符串数组 字符串是不可变得,所以把它当做数组看待时,它们是只读的。

var s=test;s.charAt(0) //ts[1]   //e
0 0
原创粉丝点击