
在javascript編程學(xué)習(xí)中,除了 Object 之外,Array 類型恐怕是最常用的類型了。javascript語(yǔ)言中的Array 中 的數(shù)組與其他多數(shù)語(yǔ)言中的數(shù)組有著相當(dāng)大的區(qū)別。
雖然javascript數(shù)組與其他語(yǔ)言中的數(shù)組都是數(shù)據(jù)的有序列表,但與其他語(yǔ)言不同的是,javascript 數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù)。
創(chuàng)建數(shù)組的基本方式有兩種
//第一種是使用 Array 構(gòu)造函數(shù)
var colors = new Array();
var colors = new Array("red", "blue", "green"); //設(shè)置值
預(yù)先知道數(shù)組要保存的項(xiàng)目數(shù)量
var colors = new Array(20);
//第二種基本方式是使用數(shù)組字面量表示法
var colors = ["red", "blue", "green"];
var colorsLength = colors.length; //獲取數(shù)組值個(gè)數(shù)
Array數(shù)組值的訪問(wèn)
數(shù)組的訪問(wèn)是通過(guò)數(shù)組下標(biāo)去一一對(duì)應(yīng)訪問(wèn)值(下標(biāo)是從0開(kāi)始)
var colors = ["red", "blue", "green"];
alert(colors[0]); //"red"
alert(colors[1]); //"blue"
對(duì)于數(shù)組值的訪問(wèn)我們經(jīng)常用的是訪問(wèn)第一個(gè)值和最后一個(gè)值,示例
colors[0] ;//數(shù)組第一個(gè)值
colors[colors.length-1] ;//數(shù)組最后一個(gè)值
有數(shù)組訪問(wèn)值就有設(shè)置數(shù)組值,數(shù)組的賦值或者修改也是通過(guò)數(shù)組下標(biāo)直接賦值或者修改,示例
var colors = ["red", "blue", "green"];
colors[1] = "yellow";
檢測(cè)數(shù)組
對(duì)于判斷是否為數(shù)組,我們用Array.isArray()方法確定某 個(gè)值到底是不是數(shù)組。
var value = [1,2,3];
if (Array.isArray(value)){
//對(duì)數(shù)組執(zhí)行某些操作
alert("是數(shù)組")
} esle{
alert("不是數(shù)組")
}
轉(zhuǎn)換方法
javascript里面所有對(duì)象都具有 toLocaleString()、toString()和 valueOf()方法。其中,調(diào)用 數(shù)組的 toString()方法會(huì)返回由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串。
var colors = ["red", "blue", "green"];
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // red,blue,green
alert(colors); // red,blue,green
重排序方法
數(shù)組中已經(jīng)存在兩個(gè)可以直接用來(lái)重排序的方法:reverse()和 sort()。 reverse()方法會(huì)反轉(zhuǎn)數(shù)組項(xiàng)的順序。
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values); //5,4,3,2,1
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();
alert(values); //0,1,10,15,5
可見(jiàn),即使例子中值的順序沒(méi)有問(wèn)題,但 sort()方法也會(huì)根據(jù)測(cè)試字符串的結(jié)果改變?cè)瓉?lái)的順序。 因?yàn)閿?shù)值 5 雖然小于 10,但在進(jìn)行字符串比較時(shí),"10"則位于"5"的前面,于是數(shù)組的順序就被修改了。 不用說(shuō),這種排序方式在很多情況下都不是最佳方案。因此 sort()方法可以接收一個(gè)比較函數(shù)作為參 數(shù),以便我們指定哪個(gè)值位于哪個(gè)值的前面。
比較函數(shù)接收兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等 則返回 0,如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之后則返回一個(gè)正數(shù)。
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
這個(gè)比較函數(shù)可以適用于大多數(shù)數(shù)據(jù)類型,只要將其作為參數(shù)傳遞給 sort()方法即可
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15
在將比較函數(shù)傳遞到 sort()方法之后,數(shù)值仍然保持了正確的升序。當(dāng)然,也可以通過(guò)比較函數(shù) 產(chǎn)生降序排序的結(jié)果,只要交換比較函數(shù)返回的值即可。
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); // 15,10,5,1,0
操作方法
javascript為操作已經(jīng)包含在數(shù)組中的項(xiàng)提供了很多方法,其中,concat()方法可以基于當(dāng)前數(shù) 組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組。
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown
下一個(gè)方法是 slice(),它能夠基于當(dāng)前數(shù)組中的一或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組。slice()方法可以 接受一或兩個(gè)參數(shù),即要返回項(xiàng)的起始和結(jié)束位置。在只有一個(gè)參數(shù)的情況下,slice()方法返回從該 參數(shù)指定位置開(kāi)始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個(gè)參數(shù),該方法返回起始和結(jié)束位置之間的項(xiàng)— —但不包括結(jié)束位置的項(xiàng)。注意,slice()方法不會(huì)影響原始數(shù)組。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow
數(shù)組splice()方法,這個(gè)方法恐怕要算是最強(qiáng)大的數(shù)組方法了,它有很多種用法。 splice()的主要用途是向數(shù)組的中部插入項(xiàng),但使用這種方法的方式則有如下 3 種。
刪除:可以刪除任意數(shù)量的項(xiàng),只需指定 2 個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
例如,splice(0,2)會(huì)刪除數(shù)組中的前兩項(xiàng)。
插入:可以向指定位置插入任意數(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 開(kāi)始插入字符串"red"和"green"。
替換:可以向指定位置插入任意數(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),然后再?gòu)奈恢?2 開(kāi)始插入字符串
"red"和"green"。
splice()方法始終都會(huì)返回一個(gè)數(shù)組,該數(shù)組中包含從原始數(shù)組中刪除的項(xiàng)(如果沒(méi)有刪除任何 項(xiàng),則返回一個(gè)空數(shù)組)
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 開(kāi)始插入兩項(xiàng)
alert(colors); // green,yellow,orange,blue
alert(removed); // 返回的是一個(gè)空數(shù)組
removed = colors.splice(1, 1, "red", "purple"); // 插入兩項(xiàng),刪除一項(xiàng)
alert(colors); // green,red,purple,orange,blue
alert(removed); // yellow,返回的數(shù)組中只包含一項(xiàng)