@(javascript)[js數組]javascript
[toc]java
數組也是一種數據類型,用於存放數據。在各大語言中都存在數組,可是語法因爲大同小異。在JavaScript中數組也是一個很是重要的東西,因此有必要好好的瞭解一下。數組
在JavaScript中數組是一中數據格式,不是一種數據類型。 咱們能夠使用構造函數
與字面量
兩種方式建立一個數組。瀏覽器
構造函數:
函數
var arr = new Array()
console.log(arr) // []
複製代碼
我看能夠在建立的時候傳遞參數:測試
var arr = new Array(10)
console.log(arr) // (10) [empty × 10]
var arr = new Array(-10)
console.log(arr) // Uncaught RangeError: Invalid array length
var arr = new Array(10,10)
console.log(arr) // (2) [10, 10]
var arr = new Array("10")
console.log(arr) // ["10"]
複製代碼
能夠看出,參數若是是ui
也能夠使用字面量的方式建立一個新數組。 字面量:
this
var arr = [];
console.log(arr) // []
var arr = [10]
console.log(arr) // [10]
var arr = [10,10]
console.log(arr) // [10, 10]
var arr = ["10"]
console.log(arr) // ["10"]
複製代碼
與使用構造函數
不一樣的是,使用字面量是沒法一下建立一個長度爲n
的數組的,若是是要建立一個長度爲10的數組,能夠直接修改數組的長度。數組的長度是可讀可寫的。spa
var arr = [];
console.log(arr.length) // 0
arr.length = 10;
console.log(arr.length) // 10
console.log(arr) // (10) [empty × 10]
複製代碼
若是修改長度後數組的長度大於原來的長度,那麼多出來的這幾項爲空(empty,一些瀏覽器顯示爲undefined)。若果是小於原來數組的長度,那麼就是從數組的末尾刪除這個差值的項數。code
也能夠直接使用數組的下標添加或者是修改數組
var arr = [0,1,2];
arr[1] = "1";
arr[5] = "5";
console.log(arr) // (6) [0, "1", 2, empty × 2, "5"]
複製代碼
若是數組中原來就存放了這一下那麼就是修改,arr[1] = "1"
。不然就是添加這一項arr[5] = "5"
。中間多出來的顯示一個empty
。
數組的方法是很是多的。
push
與unshift
方法都是添加數組。push
是往數組後面添加一項,unshift
是往數組前面添加一項。
var arr = [1,2,3]
var res = arr.push(4)
console.log(arr) // (4) [1, 2, 3, 4]
console.log(res) // 4
var res = arr.unshift(4)
console.log(arr) // (5) [4, 1, 2, 3, 4]
console.log(res) // 5
複製代碼
兩個方法都接受至少0個參數。 兩個方法都是返回的新數組的長度
。
pop
與shift
都是刪除數組某一項的方法。pop
是刪除數組的這最後一項,shift
是刪除數組的第一項。分別與push
與unshift
方法對應。
var arr = [1,2,3]
var res = arr.pop()
console.log(arr) // (2) [1, 2]
console.log(res) // 3
var res = arr.shift()
console.log(arr) // [2]
console.log(res) // 1
複製代碼
兩個方法都不須要參數 兩個方法都是返回的刪除的這一項
。
var arr = [3,5,1,6,4,7];
console.log(arr.reverse()) // (6) [7, 4, 6, 1, 5, 3]
複製代碼
很簡單,就是把數組倒序了。
var arr = [3,5,1,6,4,7];
console.log(arr.sort()) // (6) [1, 3, 4, 5, 6, 7]
複製代碼
若是隻是一位數字沒有問題,可是若是是多爲數字就有問題。
var arr = [22,3,556,1,32,11,2]
console.log(arr.sort()) // (7) [1, 11, 2, 22, 3, 32, 556]
複製代碼
由於sort()方法會根據測試字符串的結果來改變順序比較2與11
的時候比較的是字符串"2"與"11"。因此出現上面的結果。
sort方法能夠接受一個函數做爲參數,本身規定排序問題。
var arr = [22,3,556,1,32,11,2]
console.log(arr.sort(function(a,b){
return a - b;
})) // (7) [1, 2, 3, 11, 22, 32, 556]
複製代碼
參數函數接收兩個參數,第一個參數因該位於第二個前面放回負數,位於以後返回正數,不然返回0。
concat 方法及拼接數組。在不改變原數組的狀況下把多個數組拼接返回新數組。
var arr = [1,2];
var res = arr.concat([2,3])
console.log(arr) // (2) [1, 2]
console.log(res) // (4) [1, 2, 2, 3]
複製代碼
slice方法能夠把數組切割
var arr = [1,2,3,4,5]
console.log(arr.slice(1)) // (4) [2, 3, 4, 5]
console.log(arr.slice(1,3)) // (4) [2, 3]
console.log(arr) // (5) [1, 2, 3, 4, 5]
複製代碼
slice接收兩個參數,第一個是切割的開始位置。第二個可選,表示切割的結束位置(不包含這個索引對應的值),若是沒有第二個參數,表示末尾。
若是slice中存在負數
,則是倒數的
。若是是slice(-1,3)則至關因而slice(4,3)。那麼返回的是一個空數組。
splice是一個很是強大的方法,以前除了排序其餘的方法均可以使用splice實現。這個方法自身能夠接收>=2
個參數。 兩個參數爲刪除:
var arr = [1,2,3,4];
var res = arr.splice(1,2);
console.log(arr) // [1,4]
console.log(res) // [2,3]
複製代碼
第一個參數是刪除的開始位置,第二個刪除的項數。上面的表示第下標爲1開始刪除兩項。 返回的是刪除的內容。 三個參數是插入:
var arr = [1,2,3,4];
var res = arr.splice(1,0,3,5);
console.log(arr) // (6) [1, 3, 5, 2, 3, 4]
console.log(res) // (2) []
複製代碼
第三個及之後參數表示的是須要插入的項。
這樣就能夠實現替換的效果了。
var arr = [1,2,3,4];
var res = arr.splice(1,1,3,5);
console.log(arr) // (5) [1, 3, 5, 3, 4]
console.log(res) // (2) [2]
複製代碼
上面表示從第一項開始,刪除一項而且替換爲後面的東西。
兩個方法都是查找,接收一個參數,若是有返回查找的東西在數組中出現的下標(位置)
。沒有返回-1
。indexOf
是正向查找,lastIndexOf
是反向查找。
var arr = [1,2,3,4,3,2,1]
console.log(arr.indexOf(3)) // 2
console.log(arr.indexOf(5)) // -1
console.log(arr.lastIndexOf(3)) // 4
console.log(arr.lastIndexOf(5)) // -1
複製代碼
this
,這個this
就表示第二個參數。第一個參數函數能夠接收三個參數:
兩個方法是判讀數組中每一項滿不知足這個條件。every
表示每一項都知足返回true,不然返回false。some
表示數組中有知足的就返回true,不然false。
var arr = [1,2,3,4,5]
var res = arr.every(function(item,index){
return item > 2
})
console.log(res) // false
var res = arr.some(function(item,index){
return item > 2
})
console.log(res) // true
複製代碼