JavaScript數(shù)組方法

JavaScript數(shù)組方法總結(jié)


push() 可以接受一個(gè)或者多個(gè)參數(shù)俘侠,將參數(shù)追加到數(shù)組的尾部购撼,返回添加后的數(shù)組的長(zhǎng)度,原數(shù)組會(huì)發(fā)生改變匕累。

pop() 從數(shù)組尾部刪除一個(gè)元素陵刹,返回這個(gè)被刪除的元素,原數(shù)組發(fā)生改變欢嘿。

unshift() 可以接受一個(gè)或者多個(gè)參數(shù)衰琐,將參數(shù)放到數(shù)組的頭部也糊,返回添加后的數(shù)組的長(zhǎng)度,原數(shù)組會(huì)發(fā)生改變羡宙。

shift() 從數(shù)組頭部刪除一個(gè)元素狸剃,返回這個(gè)被刪除的元素,原數(shù)組發(fā)生改變狗热。

slice() 截取類 如果不傳參數(shù)钞馁,會(huì)返回原數(shù)組;如果一個(gè)參數(shù)匿刮,從該參數(shù)表示的索引開始截取僧凰,直至數(shù)組結(jié)束,返回這個(gè)截取數(shù)組僻焚,原數(shù)組不變允悦;兩個(gè)參數(shù),從第一個(gè)參數(shù)對(duì)應(yīng)的索引開始截取虑啤,到第二個(gè)參數(shù)對(duì)應(yīng)的索引結(jié)束隙弛,但不包括第二個(gè)參數(shù)對(duì)應(yīng)的索引上值,原數(shù)組不改變狞山;最多接受兩個(gè)參數(shù)全闷。

splice() 截取類 沒有參數(shù),返回空數(shù)組萍启,原數(shù)組不變总珠;一個(gè)參數(shù),從該參數(shù)表示的索引位開始截取勘纯,直至數(shù)組結(jié)束局服,返回截取的 數(shù)組,原數(shù)組改變驳遵;兩個(gè)參數(shù)淫奔,第一個(gè)參數(shù)表示開始截取的索引位,第二個(gè)參數(shù)表示截取的長(zhǎng)度堤结,返回截取的 數(shù)組唆迁,原數(shù)組改變;三個(gè)或者更多參數(shù)竞穷,第三個(gè)及以后的參數(shù)表示要從截取位插入的值唐责。

reverse() 不接受參數(shù),數(shù)組翻轉(zhuǎn)瘾带。

sort()排序鼠哥。

arr.sort(function(a,b){? ? ? ? ? ? ? ??

????return a-b; //從小到大排序

? ? return b-a; //從大到小排序? ? ? ? ??

});?

join()參數(shù)來拼接;分隔符。

concat()將參數(shù)放入原數(shù)組后返回肴盏,原數(shù)組本身不變科盛,如果參數(shù)是數(shù)組,將值提出來菜皂。

isArray()判斷是否是數(shù)組。

toString()數(shù)組轉(zhuǎn)字符串厉萝。

ES5新增的數(shù)組方法2個(gè)索引方法:indexOf() 和 lastIndexOf()恍飘;

indexOf()從前往后遍歷,返回item在數(shù)組中的索引位谴垫,如果沒有返回-1章母;通常用來判斷數(shù)組中有沒有某個(gè)元素◆婕簦可以接收兩個(gè)參數(shù)乳怎,第一個(gè)參數(shù)是要查找的項(xiàng),第二個(gè)參數(shù)是查找起點(diǎn)位置的索引前弯。lastIndexOf()與indexOf一樣蚪缀,區(qū)別是從后往前找。

5個(gè)迭代方法:forEach()恕出、map()询枚、filter()、some()浙巫、every()金蜀;

forEach()forEach方法與map方法很相似,也是對(duì)數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)的畴。但是渊抄,forEach方法不返回值,只用來操作數(shù)據(jù)丧裁。這就是說护桦,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法渣慕,否則使用forEach方法嘶炭;forEach的用法與map方法一致,參數(shù)是一個(gè)函數(shù)逊桦,該函數(shù)同樣接受三個(gè)參數(shù):當(dāng)前值眨猎、當(dāng)前位置、整個(gè)數(shù)組强经。map()將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)睡陪,然后把每一次的執(zhí)行結(jié)果組成一個(gè)新數(shù)組返回;map方法接受一個(gè)函數(shù)作為參數(shù)。該函數(shù)調(diào)用時(shí)兰迫,map方法向它傳入三個(gè)參數(shù):當(dāng)前成員信殊、當(dāng)前位置和數(shù)組本身。

filter()用于過濾數(shù)組成員汁果,滿足條件的成員組成一個(gè)新數(shù)組返回涡拘;它的參數(shù)是一個(gè)函數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù)据德,返回結(jié)果為true的成員組成一個(gè)新數(shù)組返回鳄乏。該方法不會(huì)改變?cè)瓟?shù)組;可以接受三個(gè)參數(shù):當(dāng)前成員棘利,當(dāng)前位置和整個(gè)數(shù)組橱野。

some()該方法對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任何一項(xiàng)返回 true善玫,則返回true水援。(some方法會(huì)在數(shù)組中任一項(xiàng)執(zhí)行函數(shù)返回true之后,不在進(jìn)行循環(huán)茅郎。)

every()該方法對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)蜗元,如果該函數(shù)對(duì)每一項(xiàng)都返回 true,則返回true只洒。2個(gè)歸并方法:reduce()许帐、reduceRight();reduce()依次處理數(shù)組的每個(gè)成員毕谴,最終累計(jì)為一個(gè)值成畦。reduce是從左到右處理(從第一個(gè)成員到最后一個(gè)成員)。參數(shù)是一個(gè)函數(shù),該函數(shù)接受以下兩個(gè)參數(shù):1累積變量涝开,默認(rèn)為數(shù)組的第一個(gè)成員循帐;2當(dāng)前變量,默認(rèn)為數(shù)組的第二個(gè)成員舀武。reduceRight()從右往左拄养。

ES6新增的數(shù)組方法Array.from()用于類似數(shù)組的對(duì)象(即有l(wèi)ength屬性的對(duì)象)和可遍歷對(duì)象轉(zhuǎn)為真正的數(shù)組。

let json ={? ? '0':'hello',? ? '1':'123',? ? '2':'panda',? ? length:3 }?

let arr = Array.from(json); console.log(arr);

//打右铡:["hello", "123", "panda"]

Array.of()將一組值轉(zhuǎn)變?yōu)閿?shù)組瘪匿。

let arr1 = Array.of('你好','hello');?

console.log(arr1); //["你好", "hello"]

find()和findIndex()用于找出第一個(gè)符合條件的數(shù)組成員。參數(shù)是個(gè)回調(diào)函數(shù)寻馏,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)棋弥,直到找到第一個(gè)返回值為true的成員,然后返回該成員诚欠。如果沒有符合條件的成員顽染,就返回undefined漾岳;可以接收3個(gè)參數(shù),依次為當(dāng)前值粉寞、當(dāng)前位置尼荆、原數(shù)組。fill()使用fill()方法給定值填充數(shù)組唧垦。

如:new Array(3).fill(7); //[7,7,7]

可以接收第二個(gè)和第三個(gè)參數(shù)捅儒,用于指定填充的起始位置和結(jié)束位置(不包括結(jié)束位置)。

let arr3 = [0,1,2,3,4,5,6,7];?

arr3.fill('error',2,3);?

console.log(arr3); //[0,1,"error",3,4,5,6,7]

遍歷數(shù)組的方法:entries()业崖、values()野芒、keys()這三個(gè)方法都是返回一個(gè)遍歷器對(duì)象,可用for...of循環(huán)遍歷双炕,唯一區(qū)別:keys()是對(duì)鍵名的遍歷、values()對(duì)鍵值的遍歷撮抓、entries()是對(duì)鍵值對(duì)的遍歷妇斤。

for(let item of ['a','b'].keys()){? ??

????consloe.log(item);? ? //0? ? //1

}

for(let item of ['a','b'].values()){? ??

????consloe.log(item);? ? //'a'? ? //'b'

}

let arr4 = [0,1];

for(let item of arr4.entries()){? ??

????console.log(item);? ? //? [0, 0]? ? //? [1, 1]

}

如果不用for...of進(jìn)行遍歷,可用使用next()方法手動(dòng)跳到下一個(gè)值丹拯。

let arr5 =['a','b','c']

let entries = arr5.entries();

console.log(entries.next().value); //[0, "a"]

console.log(entries.next().value); //[1, "b"]

console.log(entries.next().value);//[2,"c"]

console.log(entries.next().value); //undefined

copyWithin()在數(shù)組內(nèi)部站超,將指定位置的成員復(fù)制到其他位置(會(huì)覆蓋原有成員),改變?cè)瓟?shù)組乖酬。該函數(shù)有三個(gè)參數(shù)死相。target:目的起始位置。start:復(fù)制源的起始位置(從0開始)咬像,可以省略算撮,可以是負(fù)數(shù)。end:復(fù)制源的結(jié)束位置县昂,可以省略肮柜,可以是負(fù)數(shù),實(shí)際結(jié)束位置是end-1倒彰。

const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];

arr1.copyWithin(1, 3, 6); //把第3個(gè)元素(從0開始)到第5個(gè)元素审洞,復(fù)制并覆蓋到以第1個(gè)位置開始的地方。

console.log('%s', JSON.stringify(arr1)) //[1,4,5,6,5,6,7,8,9,10,11]

start和end都是可以省略待讳。start省略表示從0開始芒澜,end省略表示數(shù)組的長(zhǎng)度值。目標(biāo)的位置不夠的创淡,能覆蓋多少就覆蓋多少痴晦。

const arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

arr2.copyWithin(3)

console.log('%s', JSON.stringify(arr2)) //[1,2,3,1,2,3,4,5,6,7,8]

start和end都可以是負(fù)數(shù),負(fù)數(shù)表示從右邊數(shù)過來第幾個(gè)(從-1開始)辩昆。start小于end阅酪,兩者為負(fù)數(shù)時(shí)也是旨袒。

const arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

arr3.copyWithin(3, -3, -2)

console.log('%s', JSON.stringify(arr3))

end永遠(yuǎn)大于end(取值必須是start右邊的),end小于start(取start左邊的值)時(shí)會(huì)返回原數(shù)組术辐。

ES7新增的數(shù)組方法includes()表示某個(gè)數(shù)組是否包含給定的值砚尽,如果包含則返回 true,否則返回false辉词”毓拢可以接收兩個(gè)參數(shù):要搜索的值和搜索的開始索引。當(dāng)?shù)诙€(gè)參數(shù)被傳入時(shí)瑞躺,該方法會(huì)從索引處開始往后搜索(默認(rèn)索引值為0)敷搪。若搜索值在數(shù)組中存在則返回true,否則返回false幢哨。

['a', 'b', 'c', 'd'].includes('b')? ? ? // true

['a', 'b', 'c', 'd'].includes('b', 1)? ? // true

['a', 'b', 'c', 'd'].includes('b', 2)? ? // false

數(shù)組迭代方法的重寫


數(shù)組迭代方法的重寫

下文中出現(xiàn)的深拷貝函數(shù)deepClone

深拷貝方法

forEach重寫

/** * forEach循環(huán) :

* 第一個(gè)參數(shù)是回調(diào)函數(shù) 回調(diào)函數(shù)的參數(shù)為( 元素,下標(biāo),當(dāng)前數(shù)組 )

* 第二個(gè)參數(shù)要修改的this指向 *

* arr.forEach( function(item,index,array){?

????console.log(this.name)

????console.log(item,index,array)

} , obj) */


重寫forEach代碼

filter方法重寫

* 重寫思路:

? ? ? ? 首先filter會(huì)返回一個(gè)新數(shù)組 所以需要?jiǎng)?chuàng)建一個(gè)新數(shù)組去接收

? ? ? ? 根據(jù)用戶的條件判斷返回的true和false去判斷要不要添加到新數(shù)組中


filter重寫代碼

every重寫

· 首先every最終返回了一個(gè)布爾值,只有當(dāng)我們傳入的函數(shù)中所返回的值都為true才會(huì)返回true只要有一個(gè)返回false那么就返回false


every方法

map方法

*? 思路和forEach差不多

*? Map方法需要return 會(huì)返回一個(gè)新數(shù)組

*? 如果沒有return返回一個(gè)都是undefined的數(shù)組且和forEach循環(huán)操作一樣


map方法重寫代碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赡勘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捞镰,更是在濱河造成了極大的恐慌闸与,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岸售,死亡現(xiàn)場(chǎng)離奇詭異践樱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凸丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拷邢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屎慢,你說我怎么就攤上這事瞭稼。” “怎么了抛人?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵弛姜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我妖枚,道長(zhǎng)廷臼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任绝页,我火速辦了婚禮荠商,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘续誉。我一直安慰自己莱没,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布酷鸦。 她就那樣靜靜地躺著饰躲,像睡著了一般牙咏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘹裂,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天妄壶,我揣著相機(jī)與錄音,去河邊找鬼寄狼。 笑死丁寄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泊愧。 我是一名探鬼主播伊磺,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼删咱!你這毒婦竟也來了屑埋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痰滋,失蹤者是張志新(化名)和其女友劉穎雀彼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即寡,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年袜刷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聪富。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡著蟹,死狀恐怖墩蔓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萧豆,我是刑警寧澤奸披,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站涮雷,受9級(jí)特大地震影響阵面,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洪鸭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一样刷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧览爵,春花似錦置鼻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽储藐。三九已至,卻和暖如春嘶是,著一層夾襖步出監(jiān)牢的瞬間钙勃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工俊啼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肺缕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓授帕,卻偏偏與公主長(zhǎng)得像同木,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跛十,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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