數(shù)組

數(shù)組數(shù)據(jù)的組合

數(shù)組是最簡(jiǎn)單的數(shù)據(jù)儲(chǔ)存結(jié)構(gòu)瘫析,在我們幾乎所有的編程語言都原生支持?jǐn)?shù)組類型扫腺,js里也是支持?jǐn)?shù)組的。


數(shù)組寫法示例

1过牙、var arr1=["a","b","c","d","e","f"];

2社牲、var arr2=[6,2,4,5,8,0,2,1,3,5,6];

數(shù)組必須寫在[ ]中粪薛,并且數(shù)組和對(duì)象相同的是它們都是通過引用的方式使用里面的內(nèi)容的悴了,所以要給數(shù)組建立一個(gè)引用的地址搏恤,如arr1、arr2


在創(chuàng)建數(shù)組是我們要注意

1湃交、每個(gè)數(shù)據(jù)都使用逗號(hào)分隔

2熟空、數(shù)據(jù)可以是任何類型

3、數(shù)據(jù)順序排列

4搞莺、可以重復(fù)


數(shù)組和對(duì)象一樣都是引用數(shù)據(jù)類型

數(shù)組中的數(shù)據(jù)按照順序從0開始排列的息罗,從0開始,我們把這個(gè)叫做索引才沧,也叫做下標(biāo)

把數(shù)組中的每個(gè)相對(duì)應(yīng)的數(shù)據(jù)叫做元素迈喉,或者簡(jiǎn)稱元

arr1[0]="z";

console.log(arr1);

在這個(gè)部分的0叫做下標(biāo)绍刮,后面添加的"z"叫做元素 ?,此時(shí)整個(gè)arr1[0]叫做下標(biāo)變量,上邊的這個(gè)寫法可以更改數(shù)組的第0項(xiàng)為z


數(shù)組的新建方式

1挨摸、字面量創(chuàng)建

var arr=[4,5,3,6,2,1];


2孩革、構(gòu)造函數(shù)創(chuàng)建

var ?arr1=new Array(4,5,3,6,2,1);


如果通過數(shù)組的構(gòu)造函數(shù)創(chuàng)建數(shù)組,參數(shù)僅有1個(gè)得运,且這個(gè)參數(shù)是正整數(shù)膝蜈,則表示新建一個(gè)具備該正整數(shù)長(zhǎng)度的空數(shù)組,里面有這個(gè)長(zhǎng)度的若干空元素

var arr=new Array(6);??Array(6)里面這個(gè)數(shù)字就是數(shù)組的長(zhǎng)度熔掺,沒有元素

如果是負(fù)數(shù)或者小數(shù)時(shí)饱搏,報(bào)錯(cuò)

?var arr2=new Array(-5);

?var arr2=new Array(3.5);


如果輸入的不是數(shù)值,是其他類型時(shí)置逻,這個(gè)數(shù)據(jù)就會(huì)作為該數(shù)組的第0個(gè)元素推沸,長(zhǎng)度為1

var arr2=new Array("a");


數(shù)組的長(zhǎng)度length

在上邊提到過幾次數(shù)組的長(zhǎng)度,數(shù)組的長(zhǎng)度我們可以通過length來查看

如下方是個(gè)數(shù)組

var arr=[1,2,3,4,5];

此時(shí)我們就可以用arr.length來查看數(shù)組的長(zhǎng)度

console.log(arr.length);

我們把a(bǔ)rr.length打印出來這時(shí)我們就可以在控制臺(tái)查看數(shù)組的長(zhǎng)度


arr.length除了可以查看數(shù)組的長(zhǎng)度還可以更改數(shù)組的長(zhǎng)度

arr.length=3;??

此時(shí)數(shù)組的長(zhǎng)度被修改為3券坞,修改為3后坤学,后面的元素將會(huì)被刪除,只保留前三個(gè)报慕,如果內(nèi)容小于3時(shí)深浮,后面將會(huì)用空元素填充,直到數(shù)組長(zhǎng)度為3


除了設(shè)置數(shù)組長(zhǎng)度和查看數(shù)組長(zhǎng)度外arr.length還可以用來清空數(shù)組設(shè)置arr.length=0;這樣整個(gè)數(shù)組清空眠冈。


在此順便提一嘴元素的個(gè)數(shù)就是數(shù)組的長(zhǎng)度


數(shù)組的最大下標(biāo)是數(shù)組的長(zhǎng)度-1(元素個(gè)數(shù)-1);

因?yàn)閿?shù)組是從0開始排序計(jì)算飞苇,而長(zhǎng)度是從1開始排序計(jì)算,所以數(shù)組的最大下標(biāo)是數(shù)組的長(zhǎng)度-1


數(shù)組的使用

在數(shù)組中所有的下標(biāo)都會(huì)轉(zhuǎn)換為number蜗顽,如果不能轉(zhuǎn)換為number的(也就是轉(zhuǎn)換后是NaN的)布卡,就會(huì)默認(rèn)添加對(duì)象的屬性名

數(shù)組的長(zhǎng)度,僅記錄下標(biāo)的個(gè)數(shù)雇盖,不包含屬性數(shù)量

數(shù)組不可以使用點(diǎn)語法獲取下標(biāo)變量忿等,但是數(shù)組中如果有屬性可以使用點(diǎn)語法取屬性


遍歷數(shù)組

循環(huán)遍歷

var arr = [5, 2, 7, , 4, 9, 6];

??????arr["a"] = 10;

將這個(gè)數(shù)組循環(huán)一遍

??????for(var i=0;i<arr.length;i++){

console.log("索引值"+i+":"+arr[i]);

i為第幾個(gè)

arr[i]為數(shù)值第i個(gè)的值

????????}


for ?in遍歷

var arr=[a:1,b:2,c:3];

????????for(var prop in obj){

?console.log(arr[prop ]); ???

prop就是鍵,屬性名

arr[prop]就是當(dāng)前prop屬性的值崔挖,屬性值

????????}



同時(shí)for ?in也可以復(fù)制數(shù)組

? var arr=[a:1,b:2,c:3];

????????var o=[];

????????for(var prop in obj){

????????????o[prop]???=????obj[prop];

屬性 屬性值

????????}

????????console.log(o);


注意數(shù)組的循環(huán)是根據(jù)下標(biāo)的數(shù)字從0開始循環(huán)到最大下標(biāo)贸街,有序?qū)ο笫茄h(huán)所有屬性名,無序?qū)ο蟮膶傩员闅v是根據(jù)對(duì)象屬性名添加的順序


for in和for區(qū)別

當(dāng)使用for in遍歷時(shí)狸相,會(huì)將所有屬性包括下標(biāo)都會(huì)轉(zhuǎn)為字符型

數(shù)組的下標(biāo)薛匪,如果給讓的是字符,會(huì)轉(zhuǎn)換成數(shù)值

for in不會(huì)遍歷空元素脓鹃,for會(huì)遍歷空元素

for in可以遍歷到數(shù)組的屬性逸尖,for只能遍歷數(shù)組所有下標(biāo),不能遍歷屬性



push在數(shù)組尾部添加一個(gè)或者多個(gè)元素,并且返回?cái)?shù)組的新長(zhǎng)度

arr.push(6);//在數(shù)組的尾部插入一個(gè)新元素

arr.push(6,7,8);//在數(shù)組的尾部插入多個(gè)新元素

var a=arr.push(6,7,8);//通過添加到尾部元素后返回?cái)?shù)組的新長(zhǎng)度

unshift在數(shù)組頭部添加一個(gè)或者多個(gè)元素娇跟,并且返回?cái)?shù)組的新長(zhǎng)度

arr.unshift(0);//在數(shù)組的頭部插入一個(gè)新元素

arr.unshift(-3,-2,-1,0);//在數(shù)組的頭部插入多個(gè)新元素

var a=arr.unshift(-3,-2,-1,0);//返回?cái)?shù)組的新長(zhǎng)度

pop刪除數(shù)組尾部的最后一個(gè)元素岩齿,并且將這個(gè)被刪除的元素返回

arr.pop();//pop中沒有參數(shù),刪除數(shù)組的最尾部一個(gè)元素

var a=arr.pop();//pop刪除數(shù)組的最尾部一個(gè)元素,并且將被刪除的元素返回


arr.pop();arr.length--;的區(qū)別

arr.length--; //等同 速度更快苞俘,但是不會(huì)返回被刪除的元素

arr.pop();//速度慢纯衍,但是會(huì)返回被刪除的元素

shift()刪除數(shù)組的第一個(gè)元素,并且返回被刪除的元素

arr.shift();//將數(shù)組的第一個(gè)元素刪除

var a=arr.shift();//將數(shù)組的第一個(gè)元素刪除苗胀,并且返回這個(gè)被刪除的元素

注意不管刪除還是添加都會(huì)改變數(shù)組的長(zhǎng)度

為了方便理解我們可以用js重構(gòu)這些

重構(gòu)push

<body>

????<script>

??????var?arr?=?[1,?2,?3,?4,?5];

??????function?pushs(arr,tian)?{

????????arr[arr.length]?=?tian;

????????return?chang?=?arr.length;

????????//?console.log(arr);

??????}

??????var?chang=pushs(arr,3);

??????console.log(chang,arr)

????</script>

????<script>

????????var?arr1=[1,2,3,4,5];

????????var?kong=[];

????????console.log("原始數(shù)組"+arr1+"數(shù)組長(zhǎng)度"+arr1.length);

????????push1(arr1,[6,7,8,9])

????????function?push1(arr1,kong){

????????????for(var?i=0;i<kong.length;i++){

????????????????arr1[arr1.length]=kong[i]

????????????}

????????????console.log("新數(shù)組"+arr1+"長(zhǎng)度"+arr1.length)

????????}

????</script>

重構(gòu)pop

var arr=[1,2,3,4,5,6,7];


????????function pops(arr){

????????????var item=arr[arr.length-1];

????????????arr.length--;

????????????return item;

????????}


???????var item=pops(arr);


????// ???arr.pop();

????????console.log(arr,item);


重構(gòu)unshift

var arr=[1,2,3,4,5,6,7];

function unshifts(arr,item){

????????????var maxIndex=arr.length-1;

????????????for(var i=maxIndex;i>=0;i--){

????????????????arr[i+1]=arr[i];

????????????}

???????????arr[0]=item;

???????????return arr.length;

????????}


???????var n=unshifts(arr,5);


???????console.log(n,arr); */


重構(gòu)shift

<script>

??????var?arr?=?[3,?2,?3,?4,?5,?6,?7,?8];

??????function?shifts()?{

????????var?fan?=?arr[0];

????????for?(var?i?=?0;?i?<?arr.length?-?1;?i++)?{

??????????arr[i]?=?arr[i?+?1];

????????}

????????arr.length--;

????????return?fan;

??????}

??????var?fan?=?-shifts(arr);

??????console.log(arr,?fan);

????</script>


concat數(shù)組的合并襟诸,合并后會(huì)返回一個(gè)新數(shù)組,原來的兩個(gè)數(shù)組不會(huì)變化

var arr=[1,2,3,4];

var arr1=[5,6,7,8];


數(shù)組的合并基协,合并后會(huì)返回一個(gè)新數(shù)組歌亲,原來的兩個(gè)數(shù)組不會(huì)變化

var arr2=arr.concat(arr1);

數(shù)組除了可以合并數(shù)組,也可以合并元素澜驮,將多個(gè)元素與原數(shù)組合并陷揪,返回新數(shù)組

var arr3=arr.concat(0,-1,-2);

concat既可以合并元素,也可以合并數(shù)組

var arr4=arr.concat(0,arr1,["A","B"]);

如果直接使用concat杂穷,就可以完成數(shù)組的復(fù)制功能

var arr5=arr.concat();


join就是將數(shù)組的每個(gè)元素以指定的字符連接形成新字符串返回

var ?arr=[1,2,3,4,5];

將數(shù)組合并為字符串返回悍缠,默認(rèn)使用,連接

var str=arr.join();


在這里join的參數(shù)是字符串的連接符

?var str=arr.join("|");


""作為連接符,會(huì)將數(shù)組元素首尾相連成為字符串

var str=arr.join("");


重構(gòu)concat

?<script>

??????var?arr=[1,2,3,4,5,6];

??????var?arr1=[7,8,9]

??????merge()

??????function?merge(){

??????????//arr的長(zhǎng)度

????????var?q=arr.length

????????//arr1的長(zhǎng)度

????????var?w=arr.length

????????for(i=0;i<arr1.length;i++){

????????????//?在arr后面添加arr1的內(nèi)容

??????????arr[q+i]=arr1[i]

????????}

????????//返回長(zhǎng)度

????????return?m=q+w

??????}

??????console.log(arr,m)

????</script>


重構(gòu)join的方法

?var?arr?=?[1,?2,?3,?4,?5];

??????function?joins(arr,?separ)?{

????????if?(separ?===?undefined)?{

??????????separ?=?",";

????????}

????????var?str=""

????????for?(var?i?=?0;?i?<?arr.length?-?1;?i++)?{

??????????str?+=?arr[i]?+?separ;

????????}

????????str?+=?arr[i];

????????return?str;

??????}

??????var?str?=?joins(arr,?"|");

??????console.log(str);


toString可以直接將數(shù)組轉(zhuǎn)換為字符串


splice這個(gè)方法可以從指定的位置刪除給定數(shù)量的元素耐量,并且在這個(gè)位置插入需要的元素并且返回被刪除的元素組成的新數(shù)組

這個(gè)方法可以從指定的位置刪除給定數(shù)量的元素飞蚓,并且在這個(gè)位置插入需要的元素并且返回被刪除的元素組成的新數(shù)組

arr.splice(從什么位置開始,刪除多少個(gè)元素,要插入的元素);


沒有任何參數(shù)時(shí),返回一個(gè)空數(shù)組

var arr1=arr.splice();

第一個(gè)參數(shù)是0,表示從第0位開始廊蜒,第二個(gè)參數(shù)刪除多少個(gè)沒有填趴拧,意味著刪除到尾部

var arr1=arr.splice(0);//將所有數(shù)據(jù)轉(zhuǎn)移到新數(shù)組


從第0位開始刪除3個(gè)元素,返回到新數(shù)組arr1

var arr1=arr.splice(0,3);


從第幾位開始可以是負(fù)數(shù)山叮,從后向前數(shù)(倒數(shù)),因?yàn)闆]有給要?jiǎng)h除的數(shù)量著榴,因此刪除到尾部

var arr1=arr.splice(-2);


從數(shù)組的第0位開始,刪除1個(gè)元素屁倔,并且在這個(gè)位置插入一個(gè)元素 -1,替換

var arr1=arr.splice(0,1,-1);

數(shù)組的最后一位替換位0

var arr1=arr.splice(-1,1,0);

將數(shù)組中第二位開始兩位元素替換為10脑又,11

var arr1=arr.splice(2,2,10,11);


在數(shù)組的第二位插入一個(gè)元素-1

arr.splice(2,0,-1);


slice按指定位置截取復(fù)制數(shù)組的內(nèi)容

arr.slice(從什么位置開始,到什么位置之前結(jié)束)

第二個(gè)參數(shù)不寫锐借,默認(rèn)截取到尾部

只能從前向后截取


例:

var arr1=arr.slice();//復(fù)制數(shù)組arr

var arr1=arr.slice(0); //復(fù)制數(shù)組

var arr1=arr.slice(3);//從第三位截取到尾部復(fù)制

var arr1=arr.slice(-2);//從倒數(shù)第二位開始截取到尾部

var arr1=arr.slice(-3,-1);//從倒數(shù)第三位到倒數(shù)第一位

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末问麸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞎饲,更是在濱河造成了極大的恐慌口叙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗅战,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驮捍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門疟呐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人东且,你說我怎么就攤上這事启具。” “怎么了珊泳?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鲁冯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我色查,道長(zhǎng)薯演,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任秧了,我火速辦了婚禮跨扮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘验毡。我一直安慰自己衡创,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布晶通。 她就那樣靜靜地躺著璃氢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狮辽。 梳的紋絲不亂的頭發(fā)上拔莱,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音隘竭,去河邊找鬼塘秦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛动看,可吹牛的內(nèi)容都是我干的尊剔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼菱皆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼须误!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仇轻,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤京痢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后篷店,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭椰,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臭家,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了方淤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钉赁。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖携茂,靈堂內(nèi)的尸體忽然破棺而出你踩,到底是詐尸還是另有隱情,我是刑警寧澤讳苦,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布带膜,位于F島的核電站,受9級(jí)特大地震影響鸳谜,放射性物質(zhì)發(fā)生泄漏膝藕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一卿堂、第九天 我趴在偏房一處隱蔽的房頂上張望束莫。 院中可真熱鬧,春花似錦草描、人聲如沸览绿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿敲。三九已至,卻和暖如春逛绵,著一層夾襖步出監(jiān)牢的瞬間怀各,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工术浪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓢对,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓胰苏,卻偏偏與公主長(zhǎng)得像硕蛹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硕并,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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