JS數(shù)組

@(javascript)[js數(shù)組]

[toc]

JS數(shù)組

數(shù)組也是一種數(shù)據(jù)類型,用于存放數(shù)據(jù)。在各大語言中都存在數(shù)組,但是語法由于大同小異。在JavaScript中數(shù)組也是一個非常重要的東西,所以有必要好好的了解一下。

創(chuàng)建一個數(shù)組

在JavaScript中數(shù)組是一中數(shù)據(jù)格式,不是一種數(shù)據(jù)類型。
我們可以使用構(gòu)造函數(shù)字面量兩種方式創(chuàng)建一個數(shù)組。

構(gòu)造函數(shù):

var arr = new Array()
console.log(arr) // []

我看可以在創(chuàng)建的時候傳遞參數(shù):

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"]

可以看出,參數(shù)如果是

  • 一個number,數(shù)組就是一個長度為number的數(shù)組,里面的每一項都為空,不支持負(fù)數(shù)(取值范圍出錯)
  • 其他情況,就是數(shù)組的每一項,幾個參數(shù)就是長度為幾的數(shù)組

也可以使用字面量的方式創(chuàng)建一個新數(shù)組。
字面量:

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"]

與使用構(gòu)造函數(shù)不同的是,使用字面量是無法一下創(chuàng)建一個長度為n的數(shù)組的,如果是要創(chuàng)建一個長度為10的數(shù)組,可以直接修改數(shù)組的長度。數(shù)組的長度是可讀可寫的。

var arr = [];
console.log(arr.length) // 0
arr.length = 10;
console.log(arr.length) // 10
console.log(arr) // (10) [empty × 10]

如果修改長度后數(shù)組的長度大于原來的長度,那么多出來的這幾項為空(empty,一些瀏覽器顯示為undefined)。若果是小于原來數(shù)組的長度,那么就是從數(shù)組的末尾刪除這個差值的項數(shù)。

也可以直接使用數(shù)組的下標(biāo)添加或者是修改數(shù)組

var arr = [0,1,2];
arr[1] = "1";
arr[5] = "5";
console.log(arr) // (6) [0, "1", 2, empty × 2, "5"]

如果數(shù)組中原來就存放了這一下那么就是修改,arr[1] = "1"。否則就是添加這一項arr[5] = "5"。中間多出來的顯示一個empty

數(shù)組的方法

數(shù)組的方法是非常多的。

添加與刪除

  • push
  • pop
  • shift
  • unshift

push與unshift

pushunshift方法都是添加數(shù)組。push是往數(shù)組后面添加一項,unshift是往數(shù)組前面添加一項。

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個參數(shù)。
兩個方法都是返回的新數(shù)組的長度。

pop與shift

popshift都是刪除數(shù)組某一項的方法。pop是刪除數(shù)組的這最后一項,shift是刪除數(shù)組的第一項。分別與pushunshift方法對應(yīng)。

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

兩個方法都不需要參數(shù)
兩個方法都是返回的刪除的這一項。

數(shù)組排序

  • reverse
  • sort

reverse反轉(zhuǎn)數(shù)組

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

很簡單,就是把數(shù)組倒序了。

sort數(shù)組排序

var arr = [3,5,1,6,4,7];
console.log(arr.sort()) // (6) [1, 3, 4, 5, 6, 7]

如果只是一位數(shù)字沒有問題,但是如果是多為數(shù)字就有問題。

var arr = [22,3,556,1,32,11,2]
console.log(arr.sort()) // (7) [1, 11, 2, 22, 3, 32, 556]

因為sort()方法會根據(jù)測試字符串的結(jié)果來改變順序比較2與11的時候比較的是字符串"2"與"11"。所以出現(xiàn)上面的結(jié)果。

sort方法可以接受一個函數(shù)作為參數(shù),自己規(guī)定排序問題。

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]

參數(shù)函數(shù)接收兩個參數(shù),第一個參數(shù)因該位于第二個前面放回負(fù)數(shù),位于之后返回正數(shù),否則返回0。

數(shù)組拼接concat

concat 方法及拼接數(shù)組。在不改變原數(shù)組的情況下把多個數(shù)組拼接返回新數(shù)組。

var arr = [1,2];
var res = arr.concat([2,3])
console.log(arr) // (2) [1, 2]
console.log(res) // (4) [1, 2, 2, 3]

數(shù)組切割slice

slice方法可以把數(shù)組切割

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接收兩個參數(shù),第一個是切割的開始位置。第二個可選,表示切割的結(jié)束位置(不包含這個索引對應(yīng)的值),如果沒有第二個參數(shù),表示末尾。

如果slice中存在負(fù)數(shù),則是倒數(shù)的。如果是slice(-1,3)則相當(dāng)于是slice(4,3)。那么返回的是一個空數(shù)組。

數(shù)組的splice方法

splice是一個非常強大的方法,之前除了排序其他的方法都可以使用splice實現(xiàn)。這個方法自身可以接收>=2個參數(shù)。
兩個參數(shù)為刪除:

var arr = [1,2,3,4];
var res = arr.splice(1,2);
console.log(arr) // [1,4]
console.log(res) // [2,3]

第一個參數(shù)是刪除的開始位置,第二個刪除的項數(shù)。上面的表示第下標(biāo)為1開始刪除兩項。
返回的是刪除的內(nèi)容。
三個參數(shù)是插入:

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) []

第三個及以后參數(shù)表示的是需要插入的項。

這樣就可以實現(xiàn)替換的效果了。

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

兩個方法都是查找,接收一個參數(shù),如果有返回查找的東西在數(shù)組中出現(xiàn)的下標(biāo)(位置)。沒有返回-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

數(shù)組的迭代方法

  • every
  • some
  • filter
  • forEach
  • map
    五個方法都可以接收兩個參數(shù)。第一個參數(shù)是一個函數(shù),第二個是第一個函數(shù)中的this的值,即:如果有第二個參數(shù),那么第一個參數(shù)中使用了this,這個this就表示第二個參數(shù)。

第一個參數(shù)函數(shù)可以接收三個參數(shù):

  • 數(shù)組每一項的值
  • 這一項在數(shù)組中的下標(biāo)
  • 數(shù)組本身

every與some

兩個方法是判讀數(shù)組中每一項滿不滿足這個條件。every表示每一項都滿足返回true,否則返回false。some表示數(shù)組中有滿足的就返回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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于最近都在freecodecamp上刷代碼,運用了很多JavaScript數(shù)組的方法,因此做了一份關(guān)于JavaS...
    2bc5f46e925b閱讀 2,176評論 0 16
  • 本文總結(jié)了數(shù)組所有的方法。 1. 檢測對象是不是數(shù)組 instanceof操作符 Array.isArray()方...
    胡不歸vac閱讀 749評論 0 1
  • 創(chuàng)建數(shù)組 arr.length--- title: js正則表達(dá)式categories: javascriptda...
    angelwgh閱讀 1,463評論 0 2
  • JavaScript中創(chuàng)建數(shù)組有兩種方式 (一)使用 Array 構(gòu)造函數(shù): var arr1 = new Arr...
    Gimmy呵呵閱讀 488評論 0 1
  • 銷售,是目前人才市場最流行、最司空見慣、最為活躍、最富挑戰(zhàn)性的職業(yè),也中流動性最強、工作量極大、工作最辛苦、最富社...
    裕_6b76閱讀 282評論 0 2

友情鏈接更多精彩內(nèi)容