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開始)

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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陕靠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笨触,更是在濱河造成了極大的恐慌懦傍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芦劣,死亡現(xiàn)場(chǎng)離奇詭異粗俱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虚吟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門寸认,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)签财,“玉大人,你說(shuō)我怎么就攤上這事偏塞〕簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵灸叼,是天一觀的道長(zhǎng)神汹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)古今,這世上最難降的妖魔是什么屁魏? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捉腥,結(jié)果婚禮上氓拼,老公的妹妹穿的比我還像新娘。我一直安慰自己抵碟,他們只是感情好桃漾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拟逮,像睡著了一般撬统。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唱歧,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天宪摧,我揣著相機(jī)與錄音,去河邊找鬼颅崩。 笑死几于,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沿后。 我是一名探鬼主播沿彭,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尖滚!你這毒婦竟也來(lái)了喉刘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漆弄,失蹤者是張志新(化名)和其女友劉穎睦裳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撼唾,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廉邑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛蒙。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糙箍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牵祟,到底是詐尸還是另有隱情深夯,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布诺苹,位于F島的核電站咕晋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筝尾。R本人自食惡果不足惜捡需,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筹淫。 院中可真熱鬧,春花似錦呢撞、人聲如沸损姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摧阅。三九已至,卻和暖如春绷蹲,著一層夾襖步出監(jiān)牢的瞬間棒卷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工祝钢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留比规,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓拦英,卻偏偏與公主長(zhǎng)得像蜒什,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疤估,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容