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