===什麼是數組===javascript
數組是數據的有序列表。
建立數組的基本方式有兩種。
第一種是使用 Array 構造函數:var colors = new Array();
建立數組的第二種基本方式是使用數組字面量表示法:var colors = ["red", "blue", "green"];前端
===檢測數組的方法===java
1》經過instanceof來判斷:value instanceof Array;
2》經過Array.isArray()方法來判斷;數組
===數組的方法===數據結構
一共總結數組常見的 22 種方法!
其中 7 種會改變原數組值:push()、pop()、shift()、unshift()、reverse()、sort()、splice()
15 種不會改變原數組的值:toString()、toLocaleSting()、valueOf()、join()、concat()、slice()、indexOf()、lastIndexOf()、every()、filter()、forEach()、map()、some()、reduce()、reduceRight()函數
1.轉換方法(toString、toLocaleSting、valueOf()、join)(不會修改原數組!)this
全部對象都會有toString、toLocaleSting、valueOf()方法。
toString、toLocaleSting方法會將數組轉換成以逗號(,)分割的字符串。
join()接收一個參數,將數組轉換爲字符串,並以這個參數做分割。spa
2.棧方法 (修改原數組!)對象
棧是一種 LIFO(Last-In-First-Out,後進先出)的數據結構,也就是最新添加的項最先被移除。而棧中項的插入(叫作推入)和移除(叫作彈出),只發生在一個位置——(棧的頂部)。ECMAScript 爲數組專門提供了 push()和 pop()方法,以便實現相似棧的行爲。
由於是棧後進先出,並且推入/彈出都是發生在棧的頂部。所以數組的尾部實際是存放在棧的頂部,因此push()(後增方法)添加在數組尾部,就是添加在棧的頂部。pop方法刪除數組尾部一位數據也就是在棧頂部刪除最新數據,知足後入先出去。排序
3.隊列方法(修改原數組!)
隊列數據結構的訪問規則是 FIFO(First-In-First-Out, 先進先出)。隊列在列表的末端添加項,從列表的前端移除項。
結合使用 shift()和 push()方法,能夠像使用隊列同樣使用數組。
由於隊列是先進先出,因此數組的尾部就對應着隊列末端,因此經過push方法在數組尾部添加數據就是在隊列末端添加。在使用shift方法在數組頂部移除一位數據就是在隊列前端移除。
ECMAScript 還爲數組提供了一個 unshift()方法。顧名思義,unshift()與 shift()的用途相反: 它能在數組前端添加任意個項並返回新數組的長度。所以,同時使用 unshift()和 pop()方法,能夠從相反的方向來模擬隊列,即在數組的前端添加項,從數組末端移除項。
4.從新排序方法 (修改原數組!)
數組中已經存在兩個能夠直接用來重排序的方法:reverse()和 sort()。
reverse反轉數組,sort按升序排列數組項——即最小的值位於最前面。sort()方法會調用每一個數組項的 toString()轉型方法,而後比較獲得的字符串(javascript字符串在進行大於(小於)比較時,會根據第一個不一樣的字符的ascii值碼進行比較,當數字(number)與字符串(string)進行比較大小時,會強制的將數字(number)轉換成字符串(string)而後再進行比較),以肯定如何排序。
sort()方法能夠接收一個比較函數做爲參數,以便咱們指定哪一個值位於哪一個值的前面。比較函數接收兩個參數,若是第一個參數應該位於第二個以前則返回一個負數,若是兩個參數相等 則返回 0,若是第一個參數應該位於第二個以後則返回一個正數。
5.操做方法
concat (不修改原數組!):先建立當前數組一個副本,而後將接收到的參數 添加到這個副本的末尾,最後返回新構建的數組。在沒有給 concat()方法傳遞參數的狀況下,它只是 複製當前數組並返回副本。若是傳遞給 concat()方法的是一或多個數組,則該方法會將這些數組中的每一項都添加到結果數組中。
slice() (不修改原數組!): 基於當前數組中的一或多個項建立一個新數組。slice()方法能夠 接受一或兩個參數,即要返回項的起始和結束位置。在只有一個參數的狀況下,slice()方法返回從該參數指定位置開始到當前數組末尾的全部項。若是有兩個參數,該方法返回起始和結束位置之間的項,但不包括結束位置的項。
起始值大於結束值:返回【】;
負數則加上數組長度來肯定座標slice(-2,-1) === slice(1,2);
splice (修改原數組!): 有不少種用法:
刪除:能夠刪除任意數量的項,只需指定 2 個參數:要刪除的第一項的位置和要刪除的項數。 例如,splice(0,2)會刪除數組中的前兩項。
插入:能夠向指定位置插入任意數量的項,只需提供 3 個參數:起始位置、要刪除的項數(0)和要插入的項。若是要插入多個項,能夠再傳入第4、第五,以致任意多個項。例如, splice(2,0,"red","green")會從當前數組的位置 2 開始插入字符串"red"和"green"。
替換:能夠向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定 3 個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數沒必要與刪除的項數相等。例如, splice (2,1,"red","green")會刪除當前數組位置2的項,而後再從位置2開始插入字符串"red"和"green"
6.位置方法 (不修改原數組!)
indexOf()和 lastIndexOf()。這兩個方法都接收兩個參數:要查找的項和(可選的)起點位置的索引。其中,indexOf()方法從數組的開頭(位置0)開始向後查找,lastIndexOf()方法則從數組的末尾開始向前查找。內部使用===進行比較。
7.迭代方法 (不修改原數組!)
ECMAScript5爲數組定義了5個迭代方法。每一個方法都接收兩個參數:要運行的函數、運行該函數的做用域對象(可選的)(影響 this 的值)。
傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置和數組對象自己。根據使用的方法不一樣,這個函數執行後的返回值可能會也可能不會影響方法的返回值。
every():對數組中的每一項運行給定函數,若是該函數對每一項都返回 true,則返回 true。 filter():對數組中的每一項運行給定函數,返回該函數會返回 true 的項組成的數組。
forEach():對數組中的每一項運行給定函數。這個方法沒有返回值。
map():對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
some():對數組中的每一項運行給定函數,若是該函數對任一項返回 true,則返回 true。
8.歸併方法(不修改原數組!)
reduce()和 reduceRight()。這兩個方法都會迭代數組的全部項,而後構建一個最終返回的值。其中,reduce()方法從數組的第一項開始,逐個遍歷到最後。而reduceRight()相反。
接收兩個參數:要調用的函數、做爲歸併基礎的初始值(可選)
函數接收4個參數:前一個值、當前值、項的索引和數組對象。這個函數返回的任何值都會做爲第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,所以第 一個參數是數組的第一項,第二個參數就是數組的第二項。