在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開始)
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
可見,即使例子中值的順序沒(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ù)指定位置開始到當(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 開始插入字符串"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 開始插入字符串
"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 開始插入兩項(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)