數組的維基百科定義是:編程
在編程語言中,數組數據結構(英語:array data structure),簡稱數組(英語:Array),是一種數據結構,是數據元素(elements)的集合。元素能夠經過索引來任意存取,索引一般是數字,用來計算元素之間存儲位置的偏移量。數組
不幸的是JavaScript沒有像此類數組同樣的數據結構,但提供了一種擁有一些類數組特性的對象,它把數組下標轉變成字符串,用其做爲屬性。數據結構
var numbers = []; //[]操做符聲明瞭一個空的數組,長度爲0。 var numbers = new Array(); //與上等價 var numbers = [1,2,3,4,5]; var numbers = new Array(1,2,3,4,5); //構造函數傳入初始值 var numbers = new Array(5); //只傳入一個參數,用來指定數組的長度 var objects = [1,"Joe",true, null]; //在 JavaScript 裏數組中的元素沒必要是同一種數據類型。
推薦使用 [ ] 操做符建立數組,這種方式效率更高。編程語言
JavaScript容許數組包含任意混合類型的值函數
var obj = ['string', 21, true, null, undefined, ['hzzly', 21], {object: true}, NaN];
var arr = [1, 2, 3, 4, 5]; arr.length //5
JavaScript數組的 length 是沒有上界的設計
若是你用大於或等於當前 length 的數字做爲下標來存儲一個元素,那麼 length 值會被增大以容納新元素,不會發生數組越界錯誤。code
var arr = []; arr.length //0 arr[1000] = true; arr.length //1001 //但 arr 只包含一個屬性
split() 方法用於把一個字符串分割成字符串數組。對象
var str = 'hzzly'; var arr = str.split(''); console.log(arr); // ["h", "z", "z", "l", "y"]
當把一個數組賦給另一個數組時,只是爲被賦值的數組增長了一個新的引用。當你經過原引用修改了數組的值,另一個引用也會感知這個變化(淺複製)。而深複製是指將原數組中的每個元素都複製一份到新數組中。排序
indexOf() 用來查找進來的參數在目標數組中是否存在。若是目標數組包含該參數,就返回該元素在數組中的索引;若是不包含,就返回-1。若是數組中包含多個相同的元素,indexOf()
函數老是返回第一個與參數相同的元素的索引。lastIndexOf(),該函數返回相同元素中最後一個元素的索引,若是沒找到相同元素,則返回-1。索引
var arr = ["h", "z", "z", "l", "y"]; arr.indexOf('h'); //0 arr.indexOf('l') //3 arr.indexOf('z') //1 arr.lastIndexOf('z') //2
join() 和 toString() 方法都返回一個包含數組全部元素的字符串,默認各元素之間用逗號分開。當直接對一個數組使用 print()
函數時,系統會自動調用數那個數組的tostring()方法。
var arr = ["h", "z", "z", "l", "y"]; arr.join() //"h,z,z,l,y" arr.toString() //"h,z,z,l,y"
concat() 方法能夠合併多個數組建立一個新數,concat() 方法發起者是一個數組,參數是另外一個數組。做爲參數的數組,其中的全部元素都被鏈接到調用 concat() 方法的數組後面;
splice() 方法截取一個數組的子集建立一個新數組;splice() 方法從現有數組裏截取一個新數組,該方法的第一個參數是截取的起始索引,第二個參數是截取的長度。
var a = ['h','z']; var b = ['z','l','y']; var c = a.concat(b) //["h", "z", "z", "l", "y"] var myFish = ['angel', 'clown', 'mandarin', 'surgeon']; // 移除 0 個元素從下標 2, 插入 'drum' var removed = myFish.splice(2, 0, 'drum'); // myFish is ['angel', 'clown', 'drum', 'mandarin', 'surgeon'] // removed is [], 沒有元素被移除 // 移除下標爲 3 的元素 removed = myFish.splice(3, 1); // myFish is ['angel', 'clown', 'drum', 'surgeon'] // removed is ['mandarin'] // 移除下標爲 2 的元素, 而後插入 'trumpet' 到下標 2 removed = myFish.splice(2, 1, 'trumpet'); // myFish is ['angel', 'clown', 'trumpet', 'surgeon'] // removed is ['drum'] // 從下標爲 0 開始移除兩個元素, 而後插入 'parrot', 'anemone' and 'blue' removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue'); // myFish is ['parrot', 'anemone', 'blue', 'trumpet', 'surgeon'] // removed is ['angel', 'clown'] // removes 2 elements from index 3 removed = myFish.splice(3, Number.MAX_VALUE); // myFish is ['parrot', 'anemone', 'blue'] // removed is ['trumpet', 'surgeon']
push()方法會將一個元素添加到數組末尾,返回數組新長度值,也可使用數組的length屬性爲數組添加元素,但push()方法看起來更直觀。
unshift() 方法能夠將元素添加在數組的開頭,也能夠經過一次調用,爲數組添加多個元素。
splice()方法能夠爲數組添加元素,需提供以下參數:起始索引(亦即你但願添加元素的地方),須要刪除的元素個數(添加元素時該參數設爲0),想要添加數組的元素(栗子能夠看上面的)。
var arr=['h']; arr.push('z'); //2 arr的值爲["h","z"] arr.unshift('y') //3 arr的值爲["y","h","z"]
pop() 方法能夠刪除數組末尾的元素,返回被刪除的值。
shift() 方法能夠刪除數組的第一個元素,返回被刪除的值。數組中的元素自動前移,比pop慢的多。
splice() 方法能夠指定要刪除的下標和個數,第一個參數是下標,第一個參數是要刪除元素的個數,返回值爲所刪除的元素。
var arr = ["h", "z", "z", "l", "y"]; arr.pop() //返回y arr的值爲["h", "z", "z", "l"] arr.shift() //返回h arr的值爲["z", "z", "l"] arr.splice(1,2) //返回["z", "l"] arr的值爲["z"]
reverse()方法將數組中元素的以中間位置進行翻轉。
sort() 會對數組按照字典順序進行排序。
使用sort()對數字排序,須要傳入一個大小比較函數: function compare(num1,num2) { return num1 - num2; } var nums = [3,1,2,100,4,200]; nums.sort(compare); //[1, 2, 3, 4, 100, 200]
forEach() 該方法接受一個函數使用參數,對數組中的每一個元素使用該函數。
every() 該方法接受一個返回值爲布爾類型的函數,對數組中得每一個元素使用該函數,若是對於全部的元素,該函數都返回 true, 則該方法返回 true。
some() 該方法也接受一個返回值爲布爾類型的函數,只要有一個元素使得該函數返回true,該方法就返回 true。
reduce() 該方法接受一個函數,返回一個值。該方法會從一個累加值開始,不斷對累加值和數組中的後續元素調用該函數,直到數組中的最後一個元素,最後返回獲得的累加值;也能夠用來將數組中的元素鏈接成一個長的字符串。
var arr = [1,2,3,4,5] arr.forEach(function(item,index){ //讓數組中的每一項作一件事情 console.log(item,index) }) var result = arr.every(function(item,index){ //檢測數組中的每一項是否符合條件 return item > 0 }) var result = arr.some(function(item,index){ //檢測數組中是否有某些項符合條件(只有知足一個即爲true) return item > 1 }) var result = arr.every(function(pre,next){ //讓數組中的前項和後項作某種計算,並累計最終值 return pre + next })
map() ,和 forEach() 類似,對數組中的每一個元素使用某個函數,區別在於返回一個新的數組,該數組的元素是對原有元素應用某個函數獲得的結果。
filter() ,和 every() 相似,傳入一個返回值爲布爾類型的函數,不一樣的是當對數組中紅全部元素應用該函數時,結果均爲 true 時, 該方法不返回
true,二十返回一個新數組,該數組包含應用該函數後結果爲true 的元素。
var arr = [1,2,3,4,5] var newArr = arr.map(function(item,index){ //讓數組經過某種計算產生一個新數組 return item * 2 }) newArr => [2,4,6,8,10] var newArr2 = arr.filter(function(item,index){ //篩選出數組中符合條件的項,組成新數組 return item > 3 }) newArr2 => [4,5]
Array.matrix = function(numrows,numcols,initial) { var arr = []; for (var i = 0; i < numrows; ++i) { var columns = []; for (var j = 0; j < numcols; ++j) { columns[j] = initial; } arr[i] = columns; } return arr; }
數組 完
以上皆爲我的觀點 如如有誤 還望指正
《JavaScript語言精粹》
《JavaScript高級程序設計》