js-数组方法的使用和详谈
寫博客的同時(shí)也是對(duì)自己知識(shí)的一次全面總結(jié),方便自己日后復(fù)習(xí)。今天總結(jié)一下JS中Array的所有方法和技巧,對(duì)算法題算是一個(gè)基礎(chǔ)了,有不足的地方,還望童鞋們指出來,一起進(jìn)步。
在總結(jié)方法之前,提到一點(diǎn),Array中的length屬性它不是只讀的!通過修改length屬性,可以刪除或添加數(shù)組的項(xiàng)。
數(shù)組類型檢測問題:instanceof()方法、Array.isArray()
開門見山,JS中Array對(duì)象有這么幾種方法:1、棧方法? 2、隊(duì)列方法? 3、排序? 4、操作方法? ?5、位置方法? ?6、迭代? ? 7、歸并
一、棧方法、隊(duì)列方法
這兩個(gè)方法最為常見,具體就是 push()? pop()為棧方法,shift()? unshift()為隊(duì)列方法。數(shù)組頭尾部的壓入和刪除
? ?三、重排序
數(shù)組中已經(jīng)存在兩個(gè)方法可以進(jìn)行數(shù)組的重排序,即 reserve()和 sort(),reserve()是反轉(zhuǎn)數(shù)組,而sort()是數(shù)組的重排序,默認(rèn)為升序,sort()實(shí)現(xiàn)排序原理是會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的? toString()方法,比較得到的字符串。這個(gè)方法可能會(huì)出錯(cuò),因?yàn)樗容^的是轉(zhuǎn)型后的字符串。通常會(huì)配合比較函數(shù)一起使用,如下圖:
四、操作方法
Array的操作方法是非常有用的,在數(shù)據(jù)結(jié)構(gòu)和算法中比較重要。concat()方法,簡單理解為數(shù)組復(fù)制,再不傳參數(shù)的情況下,就是復(fù)制原數(shù)組,參數(shù)若是一或多個(gè)數(shù)組,則將參數(shù)數(shù)組添加在原數(shù)組末尾。 slice()方法,簡單來說就是截取原數(shù)組中的一段作為新的數(shù)組返回,接受返回項(xiàng)的起始和截止位置。(左閉右開原則)即返回值不包括截止位置的值,只有一個(gè)參數(shù)的情況下,從參數(shù)位置一直截取到數(shù)組末尾。若參數(shù)中存在負(fù)值,則計(jì)算位置的方式為 數(shù)組長度加上該數(shù) 所得值。
最重要的操作方法? splice()。它可以完成增刪改,splice()方法接受三個(gè)參數(shù),起始位置、刪除項(xiàng)數(shù)目、插入的項(xiàng)。靈活運(yùn)用這三個(gè)參數(shù)的變化就可以完成數(shù)組的增刪改,刪除:splice(1, 2)從第二項(xiàng)開始刪除兩項(xiàng)。 插入: splice(1, 0, "item1", "item2")從第二項(xiàng)開始往后插入“item1”,“item2”。替換:splice(1, 2, “item1”, “item2”)原理不變,刪除了兩項(xiàng),且在原位置插入了兩項(xiàng)達(dá)到替換的作用。
五、位置方法
有兩個(gè)位置方法 indexOf() 和 lastIndexOf(),都接受兩個(gè)參數(shù),即要查找的項(xiàng)和查找起點(diǎn)的位置(該參數(shù)可選),只不過兩個(gè)方法查找的順序相反,indexOf()是從頭到尾的,且兩個(gè)方法都返回被查找的項(xiàng)在數(shù)組中的位置,若沒找到返回-1,利用這點(diǎn),我們可以用來進(jìn)行數(shù)組的去重,如圖:
上述圖例又提到了Array的另一種類型的方法,即迭代方法,JS中有五個(gè)迭代方法,every()、filter()、forEach()、map()、some()。它們都接收兩個(gè)參數(shù),一個(gè)是在數(shù)組每項(xiàng)上都要運(yùn)行的函數(shù),另一個(gè)就是該函數(shù)的作用域this。而傳入的函數(shù)又會(huì)接受三個(gè)參數(shù),數(shù)組項(xiàng)的值、其索引、原數(shù)組。解讀上圖例子,函數(shù)norepeat傳入數(shù)組arr,返回arr的filter方法,filter的參數(shù)函數(shù)有兩個(gè)參數(shù),即當(dāng)前項(xiàng)和其索引,在調(diào)用indexOf()傳入當(dāng)前項(xiàng)ele ,indexOf會(huì)查找傳入項(xiàng)在數(shù)組中第一次出現(xiàn)的位置,將該位置與filter的元素項(xiàng)位置相比,若等于則返回。數(shù)組去重會(huì)有很多不同位置的項(xiàng)值相等,迭代從左到右,filter里面只是每一項(xiàng)的值和索引,而indexOf()里面則是某個(gè)值在數(shù)組中從左到右第一次出現(xiàn)的位置索引,讓兩個(gè)索引相比較。若相等則為首次出現(xiàn),若不等,則為非首次出現(xiàn),即重復(fù)的值,不返回,則最后得到的結(jié)果就是去重后的數(shù)組。
every()和some()迭代,則是函數(shù)作用于數(shù)組每一項(xiàng),結(jié)果都是true,才返回true這是every()方法,some()則是有一項(xiàng)返回true,則結(jié)果返回true,二者很相似。
map()方法,給數(shù)組每一項(xiàng)運(yùn)行函數(shù),返回其運(yùn)行結(jié)果組成的數(shù)組。舉例,讓某數(shù)組全體項(xiàng)擴(kuò)大二倍 var mapResult = arr.map(function(itrm, index) { retrun item*2});? ?最后forEach()本質(zhì)和for循環(huán)迭代數(shù)組一樣。
六、歸并方法
ES5中有兩個(gè)數(shù)組歸并方法 reduce(), reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組項(xiàng),并返回最終的值。類似于貪吃蛇,從第一個(gè)點(diǎn)開始,吃掉往后的每一個(gè)點(diǎn)并且加在自己身上,最后變成一個(gè)包含所有點(diǎn)的結(jié)果。該方法接受一個(gè)函數(shù)和歸并基礎(chǔ)的初始值(可選)作為參數(shù),而函數(shù)接受四個(gè)參數(shù),前一項(xiàng)值,當(dāng)前值,項(xiàng)的索引,原數(shù)組。這個(gè)函數(shù)返回的值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)!舉例:求數(shù)組的和? var reduceResult = arr.reduce( function(prev, cur, index) {return prev + cur} );
作者:方紅亮
博客園:https://home.cnblogs.com/u/fanghl/
碼字不易,如需轉(zhuǎn)載,請(qǐng)注明出處,謝謝理解!
?
轉(zhuǎn)載于:https://www.cnblogs.com/fanghl/p/9383581.html
總結(jié)
以上是生活随笔為你收集整理的js-数组方法的使用和详谈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 礼物(中国剩余定理+拓展gcd求逆元+分
- 下一篇: 更改多维数组的数据结构形式