1.檢測數(shù)組
1)檢測對象是否為數(shù)組,使用instanceof 操作符
if(value instanceof Array){//對數(shù)組執(zhí)行某些操作}
2)獲取對象的類型,比較是否為object類型(此方法只能檢測是否為Object,不推薦)
if(typeof(value)=="Object"){//對數(shù)組執(zhí)行某些操作}
3)檢測對象是否為數(shù)組,使用Array.isArray()方法(只支持ie9+,firefox 4+,safari 5+,opera 10.5+和chrome)
if(Array.isArray(value)){//對數(shù)組執(zhí)行某些操作}
2. 轉(zhuǎn)換方法
所有對象都具有toLocaleString(),toString()和valueOf()方法.
調(diào)用數(shù)組的toString()方法會(huì)返回由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串.
調(diào)用valueOf()返回的還是數(shù)組.
join()方法:接收一個(gè)參數(shù),即用作分隔符的字符串,然后返回包含所有數(shù)組項(xiàng)的字符串
var colors=["red","green","blue"];alert(colors.join("||"));//red||green||blue
3. 棧方法
棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu).
JavaScript為數(shù)組專門提供了push()和pop方法()方法,以便實(shí)現(xiàn)類似棧的行為
1):push()方法可以接收任意數(shù)量的參數(shù)秋度,把它們逐個(gè)添加到數(shù)組末尾,并返回修改后數(shù)組的長度
2):pop()方法則從數(shù)組末尾移除最后一項(xiàng),減少數(shù)組的length值,然后返回移除的項(xiàng).
var colors=new Array();//創(chuàng)建一個(gè)數(shù)組
var count=colors.push("red","green");//推入兩項(xiàng)
alert(count);//2count=colors.push("black");//推入另一項(xiàng)
alert(count);//3var item=colors.pop();//移除最后一項(xiàng),并返回最后一項(xiàng)的值
alert(item);//“black”alert(colors.length);
//2以上代碼首先我們使用push()將兩個(gè)字符串推入數(shù)組的末尾,并將返回的結(jié)果保存在變量count中.然后再推入一個(gè)值,而結(jié)果任然保存在count中.因?yàn)榇藭r(shí)數(shù)組中包含3項(xiàng),所以push()返回3.在調(diào)用pop()時(shí),它會(huì)返回?cái)?shù)組的最后一項(xiàng),即字符串"black".此后,數(shù)組中僅剩兩項(xiàng).
4. 隊(duì)列方法
棧數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是LIFO(Last-In-First-Out,后進(jìn)先出),而隊(duì)列數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是FIFO(First-In-First-Out,先進(jìn)先出).
隊(duì)列在列表的末端添加項(xiàng),從列表的前端移除項(xiàng).
JavaScript為隊(duì)列提供了shift()和unshift()方法
1):shift()移除數(shù)組中第一個(gè)項(xiàng)并返回改項(xiàng),同時(shí)將數(shù)組長度減1.
2):unshift()在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組的長度.
結(jié)合push()和pop方法,shift()和unshift()方法 做的一個(gè)實(shí)例
var n=new Array("張三","李四");
n.push("王五");//添加參數(shù)到數(shù)組末尾,并修改數(shù)組長度
n.shift();//移除數(shù)組第一項(xiàng),并返回該項(xiàng)
n.unshift("小錢");//添加參數(shù)到數(shù)組前端
n.pop();//從數(shù)組末尾移除最后一項(xiàng) //循環(huán)顯示出數(shù)組的值 for(var i=0;i<n.length;i++) { console.log(n[i]); } //小錢 李四** **
5. 重排序方法
數(shù)組中已經(jīng)存在兩個(gè)可以直接用來重排序的方法:reverse()和sort()
在默認(rèn)情況下,sort()方法回按升序排列數(shù)組項(xiàng)——即最小的值位于最前面,最大的值排在最后面,為了實(shí)現(xiàn)排序,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,
然后比較得到的字符串,以確定如何排序.即數(shù)組中的每一項(xiàng)都是數(shù)值,sort()方法比較的也是字符串,如下所示
var values=[0,1,5,10,15]; values.sort();//進(jìn)行排序顯示 alert(values);//0,1,10,15,5
sort()方法根據(jù)測試字符串的結(jié)果改變原來的順序.因?yàn)閿?shù)組5雖然小雨10,但在進(jìn)行字符串比較時(shí),“10”則位于“5"的前面,于是數(shù)組的順序就被修改了.這種排序方式在很多情況下都不是最佳方案,因此sort()方法可以接收一個(gè)比較函數(shù)作為參數(shù),以便我們制定哪個(gè)值位于哪個(gè)值的前面.
比較函數(shù)接收兩個(gè)參數(shù),如果第一個(gè)參數(shù)位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等則返回0,如何第一個(gè)參數(shù)位于第二個(gè)之后則返回一個(gè)正數(shù).以下就是一個(gè)簡單的比較函數(shù):
function compare(value1,value2)
{ if(value1<value2) { return -1; }
else if(value1==value2) { return 0; }else { return 1; } }
var values=[0,1,5,10,15];
values.sort(compare);//進(jìn)行排序顯示
alert(values);//0,1,5,10,15
將比較函數(shù)傳遞到sort()方法之后,數(shù)值仍然保持了正確的升序.當(dāng)然,也可以通過比較函數(shù)產(chǎn)生降序排序的結(jié)果,只要交換比較函數(shù)的返回值即可.
注:value1<value2 返回-1表示正序,返回1表示倒序
當(dāng)然如果反轉(zhuǎn)數(shù)組原來的順序,使用reverse()方法要更快一些
當(dāng)然如何對于數(shù)值類型或其valuesOf()方法會(huì)返回?cái)?shù)值類型的對象類型,可以使用一個(gè)更簡單的比較函數(shù).這個(gè)函數(shù)只要用第一個(gè)值減第二個(gè)值即可
function compare(value1,value2){return value1-value2;}此方法返回的是正序
6. 操作方法
1):concat()方法可以基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組.
在沒有給concat()方法傳遞參數(shù)的情況下,它只是復(fù)制當(dāng)前數(shù)組并返回副本.如何傳遞給concat()方法的是一個(gè)或多個(gè)數(shù)組,
則該方法會(huì)將這些數(shù)組中的每一項(xiàng)逗添加到結(jié)果數(shù)組中.如果傳遞的值不是數(shù)組,這些值就會(huì)被簡單地添加到結(jié)果數(shù)組的末尾.下面看一個(gè)列子
var colors=["red","green","blue"];
var color2=colors.concat("yellow",["black","brown"]);
alert(color2);//red,green,blue,yellow,black,brown
2):slice()方法基于當(dāng)前數(shù)組中的一或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組.
slice()方法可以接收一或兩個(gè)參數(shù),即要返回的起始和結(jié)束位置.
在只有一個(gè)參數(shù)的情況下,slice()方法返回從該參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng).
如何有兩個(gè)參數(shù),該方法返回起始和結(jié)束位置之間的項(xiàng)——但不包括結(jié)束位置的項(xiàng).slice()方法不會(huì)影響原始數(shù)組,下面看一個(gè)列子
var colors=["red","green","blue","yellow","black"];
colors.slice(1);//green,blue,yellow,black
colors.slice(1,4)//green,blue,yellow
3):splice()方法恐怕要算是最強(qiáng)大的數(shù)組方法了,它有很多種用法。
splice()的主要用途是向數(shù)組的中部插入項(xiàng),但使用這種方法的方式則有如下3種
a:刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù).
列如:splice(0,2)會(huì)刪除數(shù)組中的前兩項(xiàng).
b:插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需要提供3個(gè)參數(shù):起始位置,0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng).
如何要插入多個(gè)項(xiàng),可以再傳入第四,第五,以至任意多個(gè)項(xiàng).
列如:splice(2,0,"red","green")會(huì)從當(dāng)前數(shù)組的位置2開始插入字符串"red"和"green"
c:替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需要提供3個(gè)參數(shù):起始位置,要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng).
插入的項(xiàng)數(shù)不必和和刪除的項(xiàng)數(shù)相等.
列如:splice(2,1,"red","green")會(huì)刪除當(dāng)前數(shù)組位置2的項(xiàng),然后再從位置2開始插入字符串"red"和"green"
注:插入和替換方式相同,不同點(diǎn)就在于第2參數(shù),為0表示插入不刪除,大于0表示要?jiǎng)h除的數(shù)量
splice()方法始終都會(huì)返回一個(gè)數(shù)組,該數(shù)組中包含從原始數(shù)組中刪除的項(xiàng)(如果沒有刪除任何項(xiàng),則會(huì)返回一個(gè)空數(shù)組).
****下面有個(gè)列子用了上述3中splice()方法,如下:
var colors=["red","green","blue"]; var removed=colors.splice(0,1);//刪除第一項(xiàng)
alert(colors);//green,blue
alert(removed);//red,返回的數(shù)組中只有一項(xiàng) removed=colors.splice(1,0,"yellow","orange");//從位置1開始插入2條數(shù)據(jù)
alert(colors);//green,blue,yellow,orange
alert(removed);//返回一個(gè)空數(shù)組
removed=colors.splice(1,1,"red","purple");//從位置1插入2條數(shù)據(jù),并刪除位置1的數(shù)據(jù)
alert(colors);//green,red,purple,yellow,orange
alert(removed);//yellow,返回的數(shù)組中只包含一項(xiàng)
7. 位置方法
兩個(gè)位置方法:indexOf()和lastIndexOf(),這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找七點(diǎn)位置的索引.
1)indexOf():從數(shù)組的開頭(位置0)開始向后查找
2)lastIndexOf():從數(shù)組的末尾開始向前查找
這兩個(gè)方法都返回查找的項(xiàng)在數(shù)組中的位置,或者在沒找到的情況下返回-1.
在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),會(huì)使用全等操作符,也就是說,要求查找的項(xiàng)必須嚴(yán)格相等
下面寫了這2個(gè)方法的實(shí)例,如下:
var numbers=[1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4));//3 返回第一個(gè)出現(xiàn)的4位置
alert(numbers.lastIndexOf(4));//5 返回最后一個(gè)出現(xiàn)的4位置
alert(numbers.indexOf(4,4));//5 從位置4開始查找第一個(gè)4出現(xiàn)的位置
alert(numbers.lastIndexOf(4,4));//3 從位置4開始查找最后一個(gè)4出現(xiàn)的位置
var person={name:"ToNi"}; var people=[{name:"ToNi"}];
var morePeople=[person]; alert(people.indexOf(person));//返回-1 必須嚴(yán)格相等,不僅僅是值相等 alert(morePeople.indexOf(person));//返回0
8. oop方法
every
arr.every(callback[, thisArg])
every 方法為數(shù)組中的每個(gè)元素執(zhí)行一次 callback 函數(shù),直到它找到一個(gè)使 callback 返回 false(表示可轉(zhuǎn)換為布爾值 false 的值)的元素。如果發(fā)現(xiàn)了一個(gè)這樣的元素搂赋,every 方法將會(huì)立即返回 false。否則记靡,callback 為每一個(gè)元素返回 true逊彭,every 就會(huì)返回 true。callback 只會(huì)為那些已經(jīng)被賦值的索引調(diào)用匪燕。不會(huì)為那些被刪除或從來沒被賦值的索引調(diào)用蕾羊。
filter
var new_array = arr.filter(callback[, thisArg])
filter() 方法創(chuàng)建一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素。
foreach
forEach() 方法對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)帽驯。
reduce
arr.reduce(callback[, initialValue])
reduce()
方法對累加器和數(shù)組中的每個(gè)元素(從左到右)應(yīng)用一個(gè)函數(shù)龟再,將其減少為單個(gè)值。