javascript引用類型之Array 類型

Array類型



在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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容