JS 數組

@(javascript)[js數組]javascript

[toc]java

JS 數組

數組也是一種數據類型,用於存放數據。在各大語言中都存在數組,可是語法因爲大同小異。在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

  • 一個number,數組就是一個長度爲number的數組,裏面的每一項都爲空,不支持負數(取值範圍出錯)
  • 其餘狀況,就是數組的每一項,幾個參數就是長度爲幾的數組

也能夠使用字面量的方式建立一個新數組。 字面量: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
  • pop
  • shift
  • unshift

push與unshift

pushunshift方法都是添加數組。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

popshift都是刪除數組某一項的方法。pop是刪除數組的這最後一項,shift是刪除數組的第一項。分別與pushunshift方法對應。

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
複製代碼

兩個方法都不須要參數 兩個方法都是返回的刪除的這一項

數組排序

  • reverse
  • sort

reverse反轉數組

var arr = [3,5,1,6,4,7];
console.log(arr.reverse()) // (6) [7, 4, 6, 1, 5, 3]
複製代碼

很簡單,就是把數組倒序了。

sort數組排序

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

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

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是一個很是強大的方法,以前除了排序其餘的方法均可以使用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]
複製代碼

上面表示從第一項開始,刪除一項而且替換爲後面的東西。

位置判斷indexOf與lastIndexOf

兩個方法都是查找,接收一個參數,若是有返回查找的東西在數組中出現的下標(位置)。沒有返回-1indexOf是正向查找,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
複製代碼

數組的迭代方法

  • every
  • some
  • filter
  • forEach
  • map 五個方法均可以接收兩個參數。第一個參數是一個函數,第二個是第一個函數中的this的值,即:若是有第二個參數,那麼第一個參數中使用了this,這個this就表示第二個參數。

第一個參數函數能夠接收三個參數:

  • 數組每一項的值
  • 這一項在數組中的下標
  • 數組自己

every與some

兩個方法是判讀數組中每一項滿不知足這個條件。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
複製代碼
相關文章
相關標籤/搜索