javascript是一門弱類型語言,javascript中的數組跟強型別的語言,如java中的數組有很大的不同。javascript中的數組是無類型的;數組元素可以是任意類型的。 javascript數組是動態,根據需要它們會增長或縮減,並且在建立數組是無須聲明一個固定大小或者在數組大小變化時無須重新分配空間。 javascript數組可能是稀疏的;數組元素的索引不一定是連續的,它們之間可能有空缺。每個數組都有一個length屬性。針對非稀疏組,該屬性就是數組元素的個數。針對稀疏數組,length比所有元素的索引要大。
/*建立數組:*///1.使用數組直接量,var empty=[];//沒有元素的數組var primes=[2,3,1,"w"];//有四個元素的數組//2.使用Array()建構函式var a=new Array();//沒有元素的數組var b=new Array(10);//調用時有一個數組參數,它指定長度var c=new Array(1,2,3,4,"a");//有五個元素的數組
/*數組元素的添加*/var a=[];//為新索引賦值a[0]="zero";a[1]="one";//使用push()方法在數組末尾增加一個或多個元素a.push("two");//向數組末尾添加一個元素a.push("three","four");//向數組末尾添加兩個元素//使用unshift()方法在數組開頭添加一個或多個元素a.unshift("yang");a.unshift("li","jia");
/*數組元素的刪除*/ var b=[1,2,3];//使用delete來刪除元素,但是不會改變數組長度, delete b[0];//b在索引0的位置不再有元素 b.length; //=>3;delete操作並不會影響數組長度//使用pop()方法來刪除元素,與push()配對使用;從數組的末尾刪除一個元素,數組長度減一;並返回刪除的元素b.pop();//刪除並返回b[2];//使用shift();該方法與unshift()配對使用;從數組頭部刪除並返回刪除的元素,後面的元素依次向前移動b.shift();//最後,splie()是一個通用的方法插入,刪除,替換數組元素的方法;
/*建立多維陣列,javascript中部支援真正的多維陣列,但是可以用數組的數組來近似的表示*/ //建立一個多維陣列 var table=new Array(10);//table有10行 for(var i=0;i<table.length;i++){ table[i]=new Array(10);//table有10列;這裡得到啦一個table[10][10]的二維數組 } for(var row=0;row<table.length;row++){ for(var col=0;col<table[row].length;col++){ table[row][col]=row*col; } } //使用多維陣列查詢結果 var product=table[5][7];//35
/*遍曆數組*/var arr=[1,2,3,3,4];//1.原生的for迴圈for(var i=0;i<arr.length;i++){ //對數組進行操作}//2.for in迴圈 for(var i in arr){ //alert(arr[i]); //對數組進行操作 }//3.forEach var sum=0; arr.forEach(function(x){//把數組的每個元素傳遞給這個函數 //sum+=x; //這裡對數組中的元素進行操作});//最後說一點:如果考慮得效能的話,最好用原生的for迴圈。
數組方法
- join();
/*Array.join()方法將數組中的所有元素都轉化為字串並串連一起,最後返回產生的字串,可以選擇定一個字串來分隔數組的各個元素,如果沒有指定預設為逗號*/var arr=[1,2,3];a.join();//"1,2,3"a.join("");//"123"//Array.join()的逆向操作是Array.split()方法;後者是把字串分割成若干塊來建立一個數組
- reverse();
/*Array.reverse()方法是將數組中的元素顛倒順序,返回逆序數組*/var arr=[1,2,3];arr.reverse();//=>"3,2,1"
- sort();
/*Array.sort()方法將數組中的元素排序並返回排序後的數組,當不帶參數的調用sort()時,數組元素以字母表順序排列;如果數組中包含undefined元素,它們會排列在數組的尾部*/var a=["banana","cherry","apple"];a.sort();//=>"["apple","banana","cherry"]";/*如果想按照自己想要的順序排列的話,可以給sort()傳遞一個比較函數;如果第一個參數要排在前面,應該返回一個小於0的數值,否則返回一個大於0的數值*/var a=[33,4,1111,22];a.sort();//=>1111,222,33,4;a.sort(function(a,b){ return a-b;});//4,33,222,1111
- concat();
/*Array.concat()方法建立並返回一個新數組,它的元素包括調用concat()的原始數組中的元素和concat()的每一個參數.如果這些參數中的任何一個自身是數組,則串連的是數組的元素,而非數組本身,但是要注意,concat()不會遞迴扁平化數組的數組,concat()也不會修改調用的數組*/var a=[1,2,3];a.concat();//返回[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]];
- slice();
/*Array.slice()方法返回指定數組的一個子片段或者子數組*/var arr=[1,2,3,4,5]//如果傳入了兩參數,Array。slice(startIndex,endIndex);返回索引從startIndex到endIndex-1的元素;arr.slice(0,3);//返回[1,2,3];//如果只傳入一個參數,則返回這個索引到數組末尾的所有的元素arr.slice(3);//返回[4,5];//如果參數中出現負數,它表示相對數組最後一個元素的位置,例如:參數-1指定最後一個元素,arr.slice(1,-1);//返回[2,3,4];arr.slice(-3,-2);//返回[3];
- splice();
/*Array.aplice()方法是在數組中插入或刪除元素的通用方法,不同於slice(),concat().splice()會修改調用的數組*//* splice()的第一的參數指定了插入或刪除的起始位置;第二個參數指定要刪除的元素個數;如果省略了第二個參數,從起始點到數組末尾的所有元素都會被刪除 */var arr=[1,2,3,4,5,6,7,8];a.splice(4);//返回[5,6,7,8];arr是[1,2,3,4];a.splice(1,2)//返回[2,3];arr是[1,4];//splice()的第三個或任意多個參數,指定了需要插入數組的元素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();
/*push()和pop()方法允許將數組當棧來用*///push()方法在數組末尾添加一個或多個元素,並返回數組的新長度//pop();方法則是從數組末尾刪除一個元素,並返回刪除的元素
- unshift()&&shift();
/*unshift()&&shift()將數組當隊列來用*///unshift();在數組的頭部添加一個或多個元素,並且將已存在的元素往後移動,最後返回子新的數組長度//shift();將數組的第一個元素刪除並返回;然後將後面的元素向前移動
- toString&&toLocaleString();
/*數組和其他的javascript對象一樣擁有toString()方法。針對數組,該方法將其的沒有的元素轉化為字串*/[1,2,3].toString();//輸出1,2,3/*toLocaleString()是toString()方法的語言版本,它調用元素的toLocaleString()方法將每個數字元素轉化為字串,並且使用本地化的分隔字元串連產生的字串*/
ECMAScript 5中的數組方法
forEach();
/*forEach()方法從頭到尾變遍曆數組,為每個元素調用指定的函數。如上所述,傳遞的函數作為forEach()的第一個參數,然後forEach()使用三個參數調用該函數:數組元素,元素索引和數組本身*/var data=[1,2,3,4,5];//計算數組元素的值var sum=0;data.forEach(function(x){ sum+=x;});//每個元素的值自加1data.forEach(function(value,i,arr){ arr[i]=value+1;})dara;//[2,3,4,5,6];//注意:forEach()無法在所有元素都在傳遞給調用函數之前終止遍曆。
map();
/*map()方法將調用的數組的每一個元素傳遞給指定的函數,並且返回一個數組,它包含該函數的傳回值*/var a=[1,2,3];var b=a.map(function(x){ return x*x;});//b[1,4,9];//注意:map()返回的是新數組,還有傳遞給map的函數應該有傳回值
filter();
/*filter()方法用來過濾數組,filter()接受一個函數用來邏輯判定,該函數返回的值為true或false;如果傳回值為true,則該元素為新數組的一個成員*/var a=[1,2,3,4,5];var b=a.filter(function(x){ return x>3;})//b[4,5];//注意:filter()會跳過稀疏數組中缺少的元素,它返回的總是稠密的。
every()&&some();
/*every()和some()方法是數組的邏輯判定;它們對數組元素應用指定的函數進行判定;傳回值為true或false*///every()方法;針對所有;若且唯若針對所有的數組元素都返回true;才返回true;a=[1,2,3];a.every(function(x){ return x>0;})//返回true;//some()方法;是存在量詞;當數組中存在一個符合條件,就返回true;a.some(function(x){ return x<0;});//返回false;
reduce()&&reduceRight()
/*reduce()&&reduceRight()方法使用指定的函數將數組元素進行組合,產生單個值*//*reduce()需要兩個參數,第一個是執行化簡操作的函數。化簡函數的任務就是用某種方法把兩個值組合或化簡為一個值,並返回化簡後的值。第二個(可選)的參數是一個傳遞給函數的初始值*/var a=[1,2,3,4,5];var sum=a.reduce(functon(x,y){ return x+y;},0);//sum=15;//reduceRight()方法是按索引從高到低來合并數組的;和reduce()一樣的用途。
indexOf()&&lastIndexOf();
/*indexOf()和lastIndexOf()搜尋整個數組中具有給定值的元素,返回找的的第一個元素的索引或如果找不到返回-1;indexOf()從頭到尾搜尋;而lastIndexOf()則反向。它們接受兩個參數:第一個參數表示要尋找的元素;第二個參數表示一個索引,從該索引開始搜尋;第二個參數可以省略;*/var a=[0,1,2,1,0];a.indexOf(1);//傳回值為1a.lastIndexOf(1);//傳回值為3;a。indexOf(3);//傳回值為-1;