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