終於,這是有關於數組的最後一篇,下一篇會真真切切給你們帶來數據結構在js中的實現方式。那麼這篇文章仍是得囉嗦一下數組的相關知識,由於數組真的過重要了!不要懷疑數組在JS中的重要性與實用性。這篇文章分爲兩部分,第一部分會給你們簡單說一下數組原生的排序方法sort和reverse。第二部分會給你們簡單說一下二維和三維數組。都不難,仔細看,很簡單的。json
一、reverse()segmentfault
reverse比較容易理解,顛倒數組中元素的順序,也就是第一個變成最後一個,最後一個呢變成第一個。後端
var nums = [0,1,2,3,4,5,6,7]; nums.reverse(); console.log(nums)//[7, 6, 5, 4, 3, 2, 1, 0]
reverse方法只是無差異的對數組進行倒敘,可能不少時候並不適用於咱們的應用場景,因此纔出現了sort()方法。數組
二、sort()數據結構
sort()方法能夠說是js數組中不太容易記憶和使用的方法,可是sort()是十分重要的一個方法,那麼下面我就詳細的說明一下,sort()的應用場景和使用方法。函數
sort()方法容許傳入一個匿名函數做爲排序的依據,也能夠不傳參數,可是我想你們都知道,在不傳參數的狀況下,不少時候的結果並非咱們想要的,好比:編碼
var nums = [0,2,4,9,10,11,20,32,3,6,7,8,15,26]; var newNums = nums.sort(); console.log(newNums)//[0, 10, 11, 15, 2, 20, 26, 3, 32, 4, 6, 7, 8, 9] console.log(nums)//[0, 10, 11, 15, 2, 20, 26, 3, 32, 4, 6, 7, 8, 9]
上面的代碼說明,sort會改變原來的數組,而不是生成一個排序後的新數組,你們看到上面的排序並非依據數字從大到小排序的。這是由於,sort在排序的時候會默認把數組中的各個元素轉換成字符串,而且依據字符串對應的ASCII碼值來比較的,那ASCII是什麼?ASCII是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言。spa
顯然這不是咱們想要的結果,因此就須要給sort傳入一個函數(compareFunction)來使排序獲得咱們想要的結果或者自定義排序的方式。code
在大多數實際工做的排序中,咱們都會依據id值得大小,或者一些依據數值大小來排序的場景。那麼咱們看看如何使用compareFunction來使sort排序能夠獲得正確的結果:對象
var nums = [0,2,4,9,10,11,20,32,3,6,7,8,15,26]; nums.sort(function (a,b) { return a - b; }) console.log(nums)// [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 15, 20, 26, 32]
我在剛接觸sort時候看到這樣的寫法,第一個反應就是a和b是什麼?他所表明的參數是什麼意義?爲何要用a和b?我用其餘的參數能夠麼?
首先,a和b在這裏只是表明數組中任意兩個元素的值,你可使用任何兩個參數來表明它。
那麼再給你們看一個:
var nums = [0,2,4,9,10,11,20,32,3,6,7,8,15,26]; var i = 0; nums.sort(function (m,n) { console.log(m,n) console.log(++i) return m - n; }) console.log(nums)// [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 15, 20, 26, 32]
上面的代碼,給你們留下一個疑問本身去找答案。這裏不會多說,看看再不一樣數組長度下sort會循環多少次?m,n每一次的值又是什麼樣的?其實一個sort方法就包含不少更深層次的問題。
那麼還有一種場景,好比說後端傳給我一個包含對象元素的數組,我須要依照id的大小來給這個數組排序,要怎麼作呢?
var objArr = [{name:"zaking",id:0},{name:"json",id:6},{name:"undefined",id:11},{name:"obj",id:10},{name:"number",id:4},{name:"string",id:5}]
objArr.sort(function(a,b){ var m = a.id; var n = b.id; return m - n; }) console.log(objArr)
console出來的結果是這樣的:
那麼這樣就實現了咱們在工做場景中排序的大多數的狀況。那麼若是你想要倒敘排序怎麼辦呢?a-b變成b-a。其實a-b這樣的方式是簡寫。
nums.sort(function (a,b) { if(a<b) { return -1 } if(a>b) { return 1 } return 0 })
或許這樣更清晰一點,判斷a和b值得大小來決定是否要調換兩個值得位置,若是a<b那麼a就放在b的後面,若是a>b,那麼久把a放在b的前面,若是a既不大於b,也不小於b,那麼說明a=b,則不改變兩個值得位置。
這裏有一篇文章,你們能夠去看一下,JS基礎篇--sort()方法的用法,參數以及排序原理。
三、多維數組的使用及場景
其實多維數組在平時的工做中仍是很常見的,最普通的要說是二維數組了,也能夠叫作矩陣。可是其實js是不支持二維或者多維數組的,可是好在js夠靈活,我沒有的,均可以模擬出來。那麼咱們也能夠經過數組嵌套數組的方式來模擬多維數組。
咱們先來看看二維數組:
var matrix = [["a","b","c","d"],["A","B","C","D"],[1,2,3,4]];
這就是一個簡單的二維數組形式,咱們一般須要遍歷數組獲取其中的每個值,其實咱們能夠把二維數組視爲行和列,第一層循環每一行,第二層循環每一行的每一列,這樣就能夠獲得二維數組中的每個元素。
var matrix = [["a","b","c","d"],["A","B","C","D"],[1,2,3,4]]; for (var i = 0; i < matrix.length; i++) { document.write("</br>") for(var j = 0; j < matrix[i].length;j++) { document.write(matrix[i][j]) } }
這樣咱們就獲得了一個二維數組內全部的元素。
其實三維數組也是同樣的,只是再多循環一層,咱們來看一下。
var matrix3 = []; for (var i = 0; i < 3; i++) { matrix3[i] = []; for (var j = 0; j < 3; j++) { matrix3[i][j] = []; for (var k = 0; k < 3; k++) { matrix3[i][j][k] = i + j + k; } } } console.log(matrix3)
數組的介紹到這裏就基本結束了,下一篇文章會跟你們一塊兒來看看如何用JS來實現棧這種數據結構。
最後,因爲本人水平有限,能力與大神仍相差甚遠,如有錯誤或不明之處,還望你們不吝賜教指正。很是感謝!