JS隨寫(xiě):A組rray數(shù)

Array數(shù)組

創(chuàng)建數(shù)組的兩種方式:

  1. 使用Array構(gòu)造函數(shù) var colors = new Array() , new 操作符可省略
    給構(gòu)造函數(shù)傳遞一個(gè)值的話(huà),若為數(shù)值,則該值為新數(shù)組的長(zhǎng)度呼奢;若為其他類(lèi)型,則該值為新數(shù)組的第一個(gè)元素,且數(shù)組長(zhǎng)度為1固额。
    var colors = new Array(3); //創(chuàng)建一個(gè)包含3項(xiàng)的數(shù)組,值都為undefined
    var colors = new Array("liyang"); //創(chuàng)建一個(gè)包含1項(xiàng)煞聪,即字符串'liyang'的數(shù)組
    根據(jù)此特性創(chuàng)建一個(gè)重復(fù)某字符串n次的方法:
function repeatString(str,n){
        return new Array(n+1).join(str);   //創(chuàng)建一個(gè)長(zhǎng)度為n+1的空數(shù)組对雪,使用str來(lái)連接這個(gè)空數(shù)組的元素,即undefined
}
repeatString("a",4);    // 返回  "aaaa"
repeatString("3",3);   //返回 "333"
  1. 使用數(shù)組字面量表示法
    var colors = ['red','yellow','green'];
    var values = [1,2,]; //不推薦,IE8及以下會(huì)視為長(zhǎng)度為3米绕,最后一個(gè)值為undefined
    var options = [,,,]; //不推薦瑟捣,IE8會(huì)視為長(zhǎng)度為4,值都是undefined

直接給Array的length賦一個(gè)新的值會(huì)導(dǎo)致Array大小的變化;
Array可以通過(guò)索引把對(duì)應(yīng)的元素修改為新的值;
如果通過(guò)索引賦值時(shí)栅干,索引超過(guò)了范圍迈套,同樣會(huì)引起Array大小的變化

檢測(cè)數(shù)組

  1. value instanceof Array 執(zhí)行環(huán)境會(huì)對(duì)其判斷有影響
  2. ECMAScript5新增的方法 Array.isArray() 來(lái)確定某個(gè)值到底是不是數(shù)組

轉(zhuǎn)換方法

所有對(duì)象都有 toLocaleString()、toString()和valueOf()方法碱鳞,數(shù)組的調(diào)用如下:

  1. toString():返回由數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的 字符串桑李;
  2. toLocaleString():同樣返回一個(gè)逗號(hào)分隔的字符串,不同在于會(huì)調(diào)用數(shù)組每一項(xiàng)的toLocaleString()方法窿给,而不是toString()方法贵白;
  3. valueOf(): 返回?cái)?shù)組;

shift,unshift和push,pop

  1. shift() 方法刪除 Array 的第一個(gè)元素崩泡,返回的是刪掉的元素
  2. unshift() 方法向 Array 的頭部添加若干值禁荒,返回的是新數(shù)組的長(zhǎng)度
  3. push() 方法向 Array 的尾部添加若干值,返回的是新數(shù)組的長(zhǎng)度
  4. pop() 方法刪除 Array 的最后一個(gè)元素角撞,返回的是刪掉的元素
var arr = [1,2,3,4];
arr.shift();  // 返回'1'
arr; // [2,3,4]
arr.unshift('a','b');  //返回 5
arr;  //['a','b','2','3','4']

arr.push('c','d');  //返回 7
arr;  //['a','b','2','3','4','c','d']
arr.pop();  //返回 'd'
arr;  //['a','b','2','3','4','c']

reverse和sort

  1. reverse() 方法用于反轉(zhuǎn)數(shù)組項(xiàng)的順序
  2. sort() 方法用于排序數(shù)組呛伴,默認(rèn)按照升序排序
    sort() 方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的 toString() 方法,然后比較字符串進(jìn)行排序谒所,可以接受一個(gè)比較函數(shù)作為參數(shù)热康。
var arr = [13,15,5,2,6];
arr.sort();
arr;  //[13,15,2,5,6]
arr.sort(function(a,b){
    return a - b;  //升序
});
arr;  //[2,5,6,13,15]

arr.sort(function(a,b){
    return b - a;  //降序
});
arr;  //[15,13,6,5,2]

slice和splice

  1. slice() 方法截取數(shù)組的部分元素,根據(jù)索引來(lái)截取劣领。對(duì)應(yīng)字符串的 substring() 方法
  2. splice() 方法可以從指定的索引處開(kāi)始刪除n個(gè)元素姐军,然后再?gòu)脑撐恢锰砑觤個(gè)元素,是數(shù)組的萬(wàn)能方法
var arr = ['red','yellow','green','blue'];
arr.slice(1,3);  //從1開(kāi)始截取到3,不包括3奕锌。返回截取的數(shù)組['yellow','green']
arr;  //數(shù)組本身不變:['red','yellow','green','blue']

var arr2 = ['red','yellow','green','blue'];
arr2.slice(2);  //從索引2開(kāi)始到結(jié)束衫贬。['green','blue']
arr2;  //數(shù)組本身不變:['red','yellow','green','blue']

var arr3 = ['red','yellow','green','blue'];
var copy = arr3.slice();  //不傳值相當(dāng)于復(fù)制數(shù)組
copy;  //返回:['red','yellow','green','blue']
copy === arr;  // false

var arr4 = ['red','yellow','green','blue'];
arr4.slice(1,-1);  // ['yellow','green']  -1索引指最后一個(gè)元素,-2指倒數(shù)第二個(gè)

---------------

var arr1 = ['a','b','c','d'];
//從索引2開(kāi)始刪除1個(gè)元素歇攻,然后再添加兩個(gè)元素
arr1.splice(2,1,'red','yellow');  //返回刪除的元素['c']
arr1;  // ['a','b','red','yellow','d']
//只刪除固惯,不添加
arr1.splice(1,2);  //返回刪除的元素?cái)?shù)組 ['b','red']
arr1;  //  ['a','yellow','d']
//只添加,不刪除
arr1.splice(1,0,'green');  //返回空[],因?yàn)闆](méi)有刪除元素
arr1;   // ['a','green','yellow','d']  注意是在索引1的<前面>添加新元素

concat和join

  1. concat() 方法把當(dāng)前的Array和另一個(gè)Array連接起來(lái)缴守,返回一個(gè)新的數(shù)組
  2. join() 方法把當(dāng)前Array的每個(gè)元素都用指定的字符串連接起來(lái)葬毫,然后返回連接后的字符串
var arr = ['a','b','c'];
var added = arr.concat([1,2,3]);
added;  // ['a','b','c',1,2,3]
arr;  //['a','b','c']  原數(shù)組并未改變
arr.concat([1,2],3);  // ['a','b','c',1,2,3] 數(shù)組元素會(huì)被拉平
arr.concat([1,2,[3,4]]);  // ['a','b','c',1,2,[3,4]] 多重?cái)?shù)組不會(huì)被拉平

var arr2 = ['a','b','c',1,3]
arr.join('-');   //返回字符串 a-b-c-1-3
arr;  //['a','b','c',1,3]  原數(shù)組并未改變
arr.toString();  //返回字符串 a,b,c,1,3
arr.join(',');  //返回字符串 a,b,c,1,3 同toString()方法

indexOf和lastIndexOf

兩者都接收兩個(gè)參數(shù):要查找的項(xiàng)和表示查找地點(diǎn)的索引(可選);indexOf()從數(shù)組開(kāi)頭開(kāi)始向后查找屡穗,lastIndexOf()從數(shù)組的末尾向前查找贴捡。若查找的項(xiàng)沒(méi)找到則返回-1

var arr = [1,2,3,2,1];
arr.indexOf(2);  //1
arr.indexOf(99);  //-1
arr.indexOf(1,1);  //4
arr.indexOf(1,-3);  //4
arr.indexOf(2,-1);  //-1
arr.lastIndexOf(2); //3
arr.lastIndexOf(2,-2)  //3
arr.lastIndexOf(2,-3)  //1

數(shù)組的迭代方法

ECMAScript5定義了5個(gè)數(shù)組的迭代方法,每個(gè)方法都接收2個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和運(yùn)行該函數(shù)的作用域?qū)ο?影響this的值(可選)。 函數(shù)會(huì)接收3個(gè)參數(shù):數(shù)組項(xiàng)的值item村砂,item項(xiàng)的索引index和該數(shù)組對(duì)象本身烂斋。

every()和some()

every() :數(shù)組中每一項(xiàng)運(yùn)行函數(shù),都返回true础废,才返回true汛骂。
some() :數(shù)組中每一項(xiàng)運(yùn)行函數(shù),有一項(xiàng)返回true评腺,就返回true帘瞭。

filter()

數(shù)組中每一項(xiàng)運(yùn)行函數(shù),返回 函數(shù)運(yùn)行為true的項(xiàng) 組成的數(shù)組蒿讥。

map()

數(shù)組中每一項(xiàng)運(yùn)行函數(shù)蝶念,返回 每次調(diào)用函數(shù)返回的值 組成的數(shù)組,跟原數(shù)組一一對(duì)應(yīng)芋绸。

forEach()

對(duì)數(shù)組中每一項(xiàng)運(yùn)行函數(shù)媒殉,沒(méi)有返回值

數(shù)組的歸并方法

reduce()和reduceRight()

ECMAScript5定義了2個(gè)數(shù)組的歸并方法,每個(gè)方法都接收2個(gè)參數(shù):在每一項(xiàng)調(diào)用的值和作為歸并的初始值(可選)摔敛。 函數(shù)會(huì)接收4個(gè)參數(shù):前一個(gè)值廷蓉,當(dāng)前值,項(xiàng)的索引和數(shù)組對(duì)象本身舷夺。這個(gè)函數(shù)的返回值會(huì)作為第一個(gè)參數(shù)自動(dòng)傳個(gè)下一項(xiàng)苦酱。 第一次迭代發(fā)生在數(shù)組第二項(xiàng)上售貌,因此第一個(gè)參數(shù)是數(shù)組第一項(xiàng)给猾,第二個(gè)參數(shù)是數(shù)組第二項(xiàng)。

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
    return prev + cur;
});
sum;  // 15

第一次執(zhí)行回調(diào)函數(shù)颂跨,prev是1敢伸,cur是2。第二次執(zhí)行恒削,prev是返回值3池颈,cur是第三項(xiàng)3尾序。過(guò)程直至數(shù)組最后一項(xiàng)。

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
    return prev + cur;
},6);
sum;  // 21

若傳入第二個(gè)參數(shù)作為初始值(可為任意值)躯砰,則第一次prev是6每币,cur是數(shù)組第一項(xiàng)1。

reduceRight()是反過(guò)來(lái)從最后開(kāi)始執(zhí)行琢歇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兰怠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子李茫,更是在濱河造成了極大的恐慌揭保,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魄宏,死亡現(xiàn)場(chǎng)離奇詭異秸侣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宠互,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)味榛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人予跌,你說(shuō)我怎么就攤上這事励负。” “怎么了匕得?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵继榆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我汁掠,道長(zhǎng)略吨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任考阱,我火速辦了婚禮翠忠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乞榨。我一直安慰自己秽之,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吃既。 她就那樣靜靜地躺著考榨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹦倚。 梳的紋絲不亂的頭發(fā)上河质,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼掀鹅。 笑死散休,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乐尊。 我是一名探鬼主播戚丸,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扔嵌!你這毒婦竟也來(lái)了昏滴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤对人,失蹤者是張志新(化名)和其女友劉穎谣殊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體牺弄,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姻几,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了势告。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇捌。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咱台,靈堂內(nèi)的尸體忽然破棺而出络拌,到底是詐尸還是另有隱情,我是刑警寧澤回溺,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布春贸,位于F島的核電站,受9級(jí)特大地震影響遗遵,放射性物質(zhì)發(fā)生泄漏萍恕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一车要、第九天 我趴在偏房一處隱蔽的房頂上張望允粤。 院中可真熱鬧,春花似錦翼岁、人聲如沸类垫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悉患。三九已至,卻和暖如春脑蠕,著一層夾襖步出監(jiān)牢的瞬間购撼,已是汗流浹背跪削。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工谴仙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迂求,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓晃跺,卻偏偏與公主長(zhǎng)得像揩局,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掀虎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 由于最近都在freecodecamp上刷代碼凌盯,運(yùn)用了很多JavaScript數(shù)組的方法,因此做了一份關(guān)于JavaS...
    2bc5f46e925b閱讀 1,976評(píng)論 0 16
  • 記得前幾天烹玉,一個(gè)師弟讓我替他宣傳一下他媽媽自己做的芝麻糊驰怎。我就給發(fā)到朋友圈了。沒(méi)想到二打,短短的一星期县忌,師弟已經(jīng)寄...
    Mr_Zoul閱讀 220評(píng)論 0 0
  • 不管是個(gè)人家庭還有國(guó)家,都需要明確的目標(biāo)继效,前進(jìn)的方向症杏,行為的理念 看看這個(gè)世界怎么樣,春夏秋冬瑞信,山川河岳厉颤,花鳥(niǎo)蟲(chóng)魚(yú)...
    陽(yáng)光果粒_d05b閱讀 198評(píng)論 0 0
  • 商風(fēng)聲閱讀 86評(píng)論 0 0