javascript
深入浅出 JavaScript 数组 v0.5
有一段時(shí)間不更新博客了,今天分享給大家的是一篇關(guān)于JS數(shù)組的,數(shù)組其實(shí)比較簡(jiǎn)單,但是用法非常靈活,在工作學(xué)習(xí)中應(yīng)該多學(xué),多用,這樣才能領(lǐng)會(huì)數(shù)組的真諦。
以下知識(shí)主要參考《JS 精粹》和《JavaScript 高級(jí)程序設(shè)計(jì)》。
?數(shù)組是一段線性分配的內(nèi)存,它通過(guò)整數(shù)計(jì)算偏移并訪問(wèn)其中的元素。JavaScript 沒(méi)有像此類數(shù)組一樣的數(shù)據(jù)結(jié)構(gòu)。
它提供了一些類數(shù)組特性的對(duì)象,它把數(shù)組的下標(biāo)轉(zhuǎn)變?yōu)樽址?/strong>,用其作為屬性。
ECMAScript和其他語(yǔ)言中的數(shù)組的區(qū)別:?
- ECMAScript 數(shù)組中的每一項(xiàng)可以保存任何類型的數(shù)據(jù)。
- ECMAScript 數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的。
創(chuàng)建數(shù)組的方式:
var arr = new Array(); var arr1 =[]; // 創(chuàng)建兩個(gè)空數(shù)組一個(gè)有趣的屬性 length
每個(gè)數(shù)組都有一個(gè) length 屬性。JavaScript 數(shù)組的 length 是沒(méi)有上界的。
length 屬性的值是這個(gè)數(shù)組最大整數(shù)屬性名加上1.它不一定等于數(shù)組里的屬性的個(gè)數(shù)。
var arr = []; arr.length; // 0 arr[100] = true; arr.length; // 101 // arr只包含一個(gè)屬性length值不是只讀的,可以設(shè)定length的值。
設(shè)置更大的length不會(huì)給數(shù)組分配更多的空間。
而把length 設(shè)小將導(dǎo)致所有下標(biāo)大于等于新length 的屬性被刪除。
刪除一個(gè)元素
?JavaScript 數(shù)組就是對(duì)象,可以使用 delete 運(yùn)算符刪除數(shù)組中的元素。
delete numbers[2]; // numbers 是 ['zero','one',undefined,'three']?
被刪除的元素變成undefined。并不會(huì)將后面的元素依次前移。
數(shù)組的檢測(cè)
對(duì)于一個(gè)網(wǎng)頁(yè)或一個(gè)全局作用域而言,使用 instanceof 操作符就能得到滿意的結(jié)果。
if (value instanceof Array) {// do sth with array }?
如果實(shí)際中有兩個(gè)全局環(huán)境的話,就存在兩個(gè)不同版本的Array 構(gòu)造函數(shù),如果你從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組,
那么傳入的數(shù)組與第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。
為了解決這個(gè)問(wèn)題,ECMAScript 5 新增了Array.isArray() 方法。
if (Array.isArray(value)) {// do sth with array }轉(zhuǎn)換方法(以下方法不做舉例,請(qǐng)參考API)
所有對(duì)象都具有 toString()、valueOf()方法。
toString() 方法返回的是由數(shù)組每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串。
valueOf() 返回的還是數(shù)組。
Array.join() 方法返回以參數(shù)為分隔的字符串。
棧方法
數(shù)組可以表現(xiàn)的像棧一樣,棧是一種LIFO的數(shù)據(jù)結(jié)構(gòu),JS數(shù)組提供的方法是 push() 和pop()?
push() 方法可以接收任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組的末尾,并返回修改后數(shù)組的長(zhǎng)度。
pop() 方法則從數(shù)組的末尾移除最后一項(xiàng),減少數(shù)組的 length 值,然后返回移除的項(xiàng)。
隊(duì)列方法
隊(duì)列數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)規(guī)則是FIFO,隊(duì)列在列表的末端添加項(xiàng),從列表的前端移除項(xiàng)。
push() 方法想數(shù)組末端添加項(xiàng)。
shift() 從數(shù)組前端取得項(xiàng),同時(shí)length 減1.
unshift() 從數(shù)組的前端添加任意項(xiàng),并返回新數(shù)組的長(zhǎng)度,因此可以使用unshift() 方法和pop() 方法從相反的方向?qū)崿F(xiàn)隊(duì)列。
重排序方法
reverse() 反轉(zhuǎn)數(shù)組項(xiàng)的順序。 這個(gè)方法的作用直觀明了,但不夠靈活。
sort() 方法默認(rèn)按升序排列數(shù)組項(xiàng),它會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到的字符串,以確定如何排序。
即使數(shù)組中的每一項(xiàng)都是數(shù)組,sort() 方法比較的也是字符串。?
該方法可以接受一個(gè)比較函數(shù)作為參數(shù),sort 可以按照比較函數(shù)給定的規(guī)則對(duì)數(shù)組進(jìn)行排序。
這兩個(gè)方法的返回值都是經(jīng)過(guò)排序后的數(shù)組。
操作方法
concat() 方法可以基于當(dāng)前對(duì)象的所有項(xiàng)創(chuàng)建一個(gè)新的數(shù)組,接收的參數(shù)添加到新數(shù)組的末尾。
參數(shù)如果是數(shù)據(jù)項(xiàng),則直接添加到末尾,如果是數(shù)組,則將數(shù)組的每一項(xiàng)添加到末尾。
slice() 該方法基于當(dāng)前數(shù)組中的一個(gè)或多個(gè)項(xiàng)創(chuàng)建一個(gè)新數(shù)組。該方法可以接收一個(gè)或兩個(gè)參數(shù),即要返回項(xiàng)的起始和結(jié)束位置。
在只有一個(gè)參數(shù)的情況下,slice() 方法返回參數(shù)指定位置到當(dāng)前數(shù)組末尾的所有項(xiàng)。
如果有兩個(gè)參數(shù),則返回起始和結(jié)束位置之間的項(xiàng),但不包括結(jié)束位置的項(xiàng)。
如果參數(shù)中有一個(gè)負(fù)數(shù),則用數(shù)組長(zhǎng)度加上該數(shù)來(lái)確定響應(yīng)的位置。
splice() 這個(gè)方法是最強(qiáng)大的數(shù)組方法。它的最主要用途是向數(shù)組的中部插入項(xiàng)。
- 刪除: 可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù);要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
- 插入: 可以向指定位置插入任意數(shù)量的項(xiàng),只需提供三個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)。如果要插入多個(gè)項(xiàng),可以傳入第四,第五。。個(gè)參數(shù)。
- 替換: 可以向指定位置插入任意數(shù)量的項(xiàng),三個(gè)參數(shù),起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。插入的項(xiàng)不必和刪除的項(xiàng)數(shù)相等。
位置方法
indexOf() 和 lastIndexOf() 兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選)表示查找起點(diǎn)位置的索引。
兩個(gè)方法都返回要查找的項(xiàng)的位置,沒(méi)有為-1.在查找的過(guò)程中,使用的是全等操作符(===)。
其中indexOf() 方法從數(shù)組的開(kāi)頭向后查找,lastIndexOf() 方法則從數(shù)組的末尾向前查找。
迭代方法
every() 對(duì)數(shù)組中每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true
filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
foreach() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù),這個(gè)函數(shù)沒(méi)有返回值
map() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù),返回每次調(diào)用函數(shù)返回的結(jié)果組成的數(shù)組
some() 對(duì)數(shù)組匯總的每一項(xiàng)運(yùn)行給定的函數(shù),如果函數(shù)對(duì)任一項(xiàng)返回true,則返回true
歸并方法
reduce() 和reduceRight() 都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值,
其中reduce() 方法從數(shù)組的第一項(xiàng)開(kāi)始逐個(gè)遍歷到最后。
而 reduceRight() 則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。
這兩個(gè)方法接收兩個(gè)參數(shù),一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)最為歸并基礎(chǔ)的初始值。
傳給reduce* () 的函數(shù)接收四個(gè)參數(shù):前一個(gè)值,當(dāng)前值,項(xiàng)的索引,和數(shù)組對(duì)象。
這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,
因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)。
轉(zhuǎn)載于:https://www.cnblogs.com/googny/p/3747832.html
總結(jié)
以上是生活随笔為你收集整理的深入浅出 JavaScript 数组 v0.5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: flash TweenMax用法
- 下一篇: 细节:以为字符串不为空