ECMAScript的每一項可以保存任何類型的數據,且數組的大小是可以動態調整的。
- 創建數組的基本方式
- 使用Array構造函數
var colors=new Array("red","blue","black");
alert(colors);//red,blue,black
var colors=new Array(3);
alert(colors.length);//3
可以通過為array構造函數添加任意數量的數組元素,當構造函數的參數只為一個時,那么是為了表明該數組的元素個數。 - 使用數組字面量表示法
var colors=['red','blue','black']; -
Array的屬性
length
該屬性代表該數組一共包含多少個數組元素,然而該屬性卻不是只讀的,我們可以通過設置他的值來調整數組的大小。當設置數組的長度小于當前長度時,則會默認裁剪掉后面多余的元素。當設置的長度大于當前元素的數量時,那么多出來的元素則會自動被默認類型為undefined。 -
檢測數組對象
這個之前就有寫過,利用關鍵字instanceof
來檢測某個對象實例是否是數組的實例。
var colors=['red','blue','black'];
alert(colors instanceof Array);//true -
轉換方法
已知所有對象都具有toLocaleString()
toString()
valueOf()
方法,調用數組的toString()
方法,會返回由數組中的每個值的字符串形式拼接而成的一個已逗號分隔字的字符串。但是valueOf()
方法還返回的是數組。
當我們直接用alert去輸出一個數組時,會被默認的已toString的方法轉化數組。 - join 可以使用不同的分隔符來構建這個字符串,然后返回包含所有項的字符串。
var colors=['red','blue','black'];
alert(colors.join('|'));//red||blue||black -
棧方法:LIFO(后進先出)
- push()
可以接受任意數量的參數,并把他們逐個添加到數組末尾,并返回修改后數組的長度。
var colors=['red','blue','black'];
colors.push('yellow','pink');
alert(colors.push());//5
alert(colors.join('|'));//red||blue||black||yellow||pink - pop()
從數組的末尾移除最后一項,減少數組的length,然后返回移除的項。
var colors=['red','blue','black'];
colors.push('yellow','pink');
colors.pop();
alert(colors.pop());//yellow
alert(colors.join('|'));//red||blue||black||yellow
- push()
-
隊列方法:FIFO(先進先出)
區別于棧方法,隊列方法是從隊列的前端移除項。方法shift()是能夠移除數組中的第一個項。 - shift()返回移除項
var colors=['red','blue','black'];
colors.shift();
alert(colors);//blue,black - unshift()這個方法是從數組的前端添加項 ,返回數組長度值。
var colors=['red','blue','black'];
colors.unshift('white');//white,red,blue,black - 重排序
- reverse()方法會反轉數組項的順序
var letter=['a','b','c','d','e'];
letter.reverse();
alert(letter);//e,d,v,b,a - sort()方法按升序排列數組項,即最想的值位于最前面,最大的值排在最后面,sort()方法比較的是字符串。但是對于數組項為數值,那么排序也會先將數組轉化為字符串,然后再排序,但是這樣排序的結果會不符合邏輯。
var letter=['d','b','e','a','c'];
letter.sort();
alert(letter);//a,b,c,d,e
【問題】
var letter=[0,1,5,10,15];
letter.sort();
alert(letter);//0,1,10,15,5
【解決方案】
sort方法會接受一個比較函數作為參數,這個比較函數接收兩個參數,并且指定哪個值位于哪個值的前面。
var letter=[0,1,5,10,15];
letter.sort(compare);
alert(letter);//0,1,5,10,15
function compare(value1,value2){
if(value1<value2)
return -1;
else if(value1>value2)
return 1;
else
return 0;
} - 操作方法
- concat()實現數組的拼接
var arr1=['big','small'];
var arr2=['middle'];
var arr3=arr1.concat(arr2,'lala');
alert(arr3);//big,small,middle,lala - slice()實現數組截取,接受一個或兩個參數,表示截取位置。第一個參數表示開始截取的位置,第二個參數表示結束位置,但不包括結束位置的項。
alert(arr3.slice(1,2));//small - splice向數組的中部插入項
- 刪除:只需要指定兩個參數,要刪除的第一項的位置與要刪除的位數。
var arr1=['big','small','susu'];
alert(arr1.splice(0,2));//big,small
alert(arr1);//susu
返回刪除項。 - 插入:可以向指定位置插入多項,接受三個參數,第一個為起始位置,第二個為0要刪除的項數,第三個為要插入的項。當然插入的項可以為多個。
var arr1=['big','small','susu'];
alert(arr1.splice(1,0,'middle','lalal'));//
alert(arr1);//big,middle,lala,small,susu - 替換 :可以向指定位置插入任意數量的項,且同時刪除任意數量的項,接受三個參數,起始位置,要刪除的項數,和要插入的任意數量的項。
var arr1=['big','small','susu'];
alert(arr1.splice(1,1,'middle','lalal'));//small
alert(arr1);//big,middle,lala,susu
- 刪除:只需要指定兩個參數,要刪除的第一項的位置與要刪除的位數。
-
位置方法
.indexOf()
與.lastIndexOf()
這兩個方法的使用與字符串一樣。 -
迭代方法
每個方法都接受兩個參數:一個是必選的:要在每一項上運行的函數。另一項是可選的:運作該函數的作用域。 - every()對數組中的每一項運行給定的函數,如果該函數對每一項都返回true,則返回true。
- filter()對數組中的每一項運行給定的函數,f返回該函數會返回true的項組成的數組。
- foreach()對數組中的每一項運行給定的函數,這個方法沒有返回值。
- map()對數組中的每一項運行給定的函數,返回每次調用的結果組成的數組。
- some()對數組中的每一項運行給定的函數,如果該函數對任一項返回true,那么該方法返回true。
-
歸并發法
迭代數組的所有項,然后構建一個最終返回的值。 - reduce():從數組的第一項開始,逐個遍歷到最后。
- reduceRight():從數組的最后一項開始,向前遍歷到第一項。
這連個方法,都接受兩個參數:一個在每一項上都調用的函數(必選);
和作為歸并基礎的初始值(可選)。
這兩個函數都接受四個參數:前一個值,當前值,項的索引,數組對象。
注意:這個函數返回的任何值都會作為第一個參數傳遞給下一項。
第一次迭代是從第二個參數開始。即第一個參數是第一項,第二個參數是第二項。
var num=[1,2,3,4,5,6,7,8,9];
var newnum=num.reduce(function(pre,cur,index,array){
return pre+cur;
})
alert(newnum);//45