首页 > 代码库 > javascript数组

javascript数组

javascript的实现对数组做了很多优化,使得典型的数组操作可以很快(用类型化数组在执行时间和内存使用上会更加高效)

三种构造方式:


 

new Array()

new Array(size)

new Array(element,element.....)

eg:

var array = new Array()var array = new Array(10)var array = new Array(1,2,3);var array = [1, 2, 3];

 

注意 1、 size设置数组元素的个数,返回数组元素的length等于size

   2、 改变数组的length属性会裁剪或者扩充数组

eg:

 

var array1 = new Array(10);array1.push(1);console.log("array1.length = " + array1.length);  //11console.log("array1[9] = " + array1[9]);  //undefinedvar array2 = new Array();array2.push(1);console.log("array2.length = " + array2.length);  //1var array3 = new Array(10);array3[0] = 1;console.log("array3.length = " + array3.length);   //10var array4 = [1, 2, 3];array4.push(3,4);console.log("array4.length = " + array4.length);  //5var array5 = [1, 2, 3];array5.length = 2;console.log("array5[2] = " + array5[2]);  //undefined;var array6 = [1, 2, 3];array6.length = 10;console.log("array6[9] = " + array6[9]);  //undefined;console.log("array6.length = " + array6.length); //10

 

 

 

ECMAScript3 方法:

 


concat:衔接数组,返回新的数组

var a = [1, 2, 3];a.concat(2, 2);  //[1, 2, 3, 2, 2]a.concat([2, 2]);  //[1, 2, 3, 2, 2]a.concat([1,1], [2, 2]); //[1, 2, 3, 1, 1, 2, 2]a.concat([1,[2,2]]); //[1, 2, 3, 1, [2, 2]]

 


 

join()

[1,2,3].join("@@");  //1@@2@@3

 


 

pop()和push(): 1、pop移除数组最后一个元素,缩短数组长度;push()添加元素,元素追加在数组末尾

        2、pop返回数组最后一个元素,push返回追加后数组的新长度

        3、直接修改数组,不会创建新的数组

//pop和pushvar stack = [];stack.push(1, 2);  //stack=[1, 2]; 返回2stack.pop(); //stack为[1], 返回2stack.push([3, 3]); //stack为[1, [3, 3]],返回2stack.pop(); //stack为[1],返回 [3, 3]

 


 

reverse():反转数组元素,重新调整数组元素顺序,不会创建新的数组,返回调整后的数组

var a = [1, 2, 3];a.reverse(); //[3,2,1]

 


 shift和unshift:

  1、shift():移除并返回数组的第一个元素,并将后续元素向前移一位,如果数组为空,直接返回undefined,shift不会创建新的数组,而是直接修改数组

  2、unshift(): 数组头部插入元素, 返回数组的长度

//shiftvar a = [1, 2, 3];a.shift(); //返回1,数组变为[2,3]var a = new Array();a.shift(); //返回undefined

 

//unshiftvar a = [1, 2, 3];a.unshift(4); //返回4, 数组为[4, 1, 2, 3]

 

 


 slice和splice

  1slice:返回数组一部分,返回新数组,注意下标的使用

  2、splice:1、插入、删除或者替换数组元素, 注意区别于slice()

    2、array.splice(start, deleteCount, value,...) 

    3、start:开始删除或者插入元素的序号

    4、deleteCount,要删除的元素的个数,如果是0表示添加元

    5、value:要插入数组的元素,一个或者是多个

       6、如果有删除数据,返回由删除数据构成的数组,如果没有删除数据,则返回[]

eg:

var a = [1, 2, 3, 4, 5, 6];a.slice(0, 3); //[1, 2, 3]a.slice(3); //[4, 5, 6]a.slice(1, -1); //[2, 3, 4, 5] ,第二个参数为负数时即从数组尾部开始计算

 

//splicevar a = [1, 2, 3, 4, 5, 6];a.splice(3); //a 变为[1, 2, 3] 返回[4, 5, 6]a.splice(3, 2); //a 变为[1, 2, 3, 6] 返回[4, 5]a.splice(1, 0, 3, 5); //a变为[1, 3, 5, 2, 3, 4, 5, 6] ;返回[]

 

 


 

sort:数组排序,返回数组引用,没有新建数组,不带参数时默认是按字母排序

//sortvar a = [11, 2, 3, "a"];a.sort(); //[11, 2, 3, "a"]var a = [11, 2, 3, "a"];function orderByNumber(a, b){    return a - b;}a.sort(orderByNumber); //[2, 3, 11, "a"]

 

 

 


 

toString 和 toLocalString

    1、toString有必要时会调用元素的toString;等价于使用join()

    2、toLocalString对数组每个元素调用toLocalString

//toString[1, 2, 3].toString(); //"1,2,3"[1, 2, 3].join(); //"1,2,3"[1, 2, "a", [2, "b"]].toString(); //"1,2,a,2,b"

 

 

 

 

ECMAScript5 新增方法:

 


 

every(): 测试断言函数是否对于数组中每个元素为真,每个为真返回true,否则返回false

eg: 

[1, 2, 3].every(function(x){    return x < 5;});   //true[1, 2, 3].every(function(x){    return x <3;});   //false

 


 

filter(): 过滤不满足条件的数组元素,返回符合条件的数组

eg:

[1, 2, 3].filter(function(x){    return x < 3;});  //[1,2]

 


forEach(): 为每个数组元素调用一个函数,没有返回值

注意:1、forEach没有返回值

   2、对于forEach中每次调用的函数对于数组序号i有三个参数: f(array[i], i, array)

     3、forEach如果设定了第二个参数object,则在函数内的this指向object, 类似于map、 filter、every等

eg:

//forEach[1, 2, 3].forEach(function(x){    x++;  //return undefined;});var a = [1, 2, 3];a.forEach(function(x,i, a){    a[i]++;  //return undefined;});console.log("a = " + a); //2, 3, 4 var b = [1, 2, 3];b.forEach(function(x){    console.log(x);    x++;  //return undefined;});console.log("b = " + b); //1, 2, 3

 


 

indexOf():查找数组,返回查找元素的下标

[1, 2 ,3].indexOf(1); //0;[1, 2 ,3].indexOf(1, 1); //-1; 第二个参数是开始查找的下标[1, 2 ,3].indexOf(4); //-1;

 


 

lastIndexOf():反向查找数组,返回查找元素的下标

//lastIndexOf[1, 2, 3].lastIndexOf(4);  //-1[1, 2, 3].lastIndexOf(3);  //2[1, 2, 3].lastIndexOf(3, 1); //-1 ,第二个参数设置开始查找的位置,1表示从倒数第二个数开始

 


 

map(): 从数组元素中计算新值,返回新的数组

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

 


reduce():1、从数组元素中计算新的值,返回最后一次调用f的返回值

     2、添加第二个参数时相当于传递给函数的初始值,结果等价于将第二个参数添加在数组的头部

          

//reduce[1, 2, 3].reduce(function(x, y){    return x * y; //(1*2)*3 = 6;})[1, 2, 3].reduce(function(x, y){    return x + y; //(1+2)+3 = 6})[1, 2, 3].reduce(function(x, y){    return x * y; //((6*1)*2)*3 = 36;}, 6);[1, 2, 3].reduce(function(x, y){    return x + y; //((6+1)+2)+3 = 12}, 6)

 


 

reduceRight():原理类似于reduce,只是从右向左开始

//reduceRight[1, 2, 3].reduceRight(function(x, y){    return x * y; //(3*2)*1 = 6;})[1, 2, 3].reduceRight(function(x, y){    return x + y; //(3+2)+1 = 6})[1, 2, 3].reduceRight(function(x, y){    return x * y; //((6*3)*2)*1 = 36;}, 6);[1, 2, 3].reduceRight(function(x, y){    return x + y; //((6+3)+2)+1 = 12}, 6)

 


 

some():判断是否有元素满足断言函数,至少有一个满足时返回true,否则返回false

//some[1, 2, 3].some(function(x){    return x > 2; //true});[1, 2, 3].some(function(x){    return x > 3; //false});