關(guān)于數(shù)組長度:
如果為一個數(shù)組元素賦值牡属,它的索引 i 大于或等于現(xiàn)有數(shù)組的長度時钮孵,length的值會自動設(shè)置為 i+1
設(shè)置length為一個小于當前長度的非負整數(shù) n 時,那些索引值大于或等于 n 的元素將從中刪除
添加數(shù)組元素:
push():在末尾添加盼樟,length+1
a.unshift():在頭部添加仆嗦,length+1
a[a.length]:在末尾添加弃锐,length+1
刪除數(shù)組元素:
pop():在末尾刪除遏佣,length-1
shift():在頭部刪除白粉,length-1掩缓,并且被刪后面的元素自動往前挪
直接指定length為更小的值雪情,則索引大于等于length的部分被切除,即使后面再將length改回來你辣,也無法找回數(shù)據(jù)巡通,均為undefined
splice():可插入,刪除舍哄,替換宴凉,會根據(jù)需要修改length的值,并移動元素到更高或更低的索引處
delete:可以刪除某個數(shù)組元素表悬,刪除后用undefined占位弥锄,不會移動其他元素,length不會自動改變
數(shù)組方法:
改變原數(shù)組:
- pop()
- push()
- shift()
- unshift():以上蟆沫,都是返回添加或刪除的單個元素
- reverse():返回位置逆序數(shù)組籽暇,非大小逆序
- undefined也會參與逆序占位,并輸出
- sort():返回排序后的數(shù)組
- 默認是按字母表排序
- 傳入回調(diào)函數(shù)時饭庞,假設(shè)第一個參數(shù)應(yīng)該在前戒悠,就要返回一個大于0的數(shù)值,所以按從小到大排序時:
function(a,b){return a-b }
- undefined會被排在最后舟山,也會占位輸出
- splice():返回被刪除的片段
不改變原數(shù)組:
- concat():a.concat([4,5])绸狐,返回拼接后的新數(shù)組
- slice():參數(shù)start,end,包前不包后累盗,返回被切除的片段寒矿。參數(shù)可以為負,此時實際的索引值為用長度加上該負值以后的值若债,如果start小于end符相,則返回空數(shù)組。
- 例: 長度為5的數(shù)組拆座,slice(-2,-1)主巍,實際指的是slice(3,4)
- filter():【跳過undefined的值,輸出時去除空缺】需要回調(diào)函數(shù)
function(value)
將每個元素值傳入挪凑,經(jīng)過一系列判斷孕索,如果返回值為true或能轉(zhuǎn)化為true的值,則將其添加到新數(shù)組中躏碳,返回新數(shù)組搞旭。
- 應(yīng)用:
a.filter(function(x){return true})
可以去除數(shù)組中的undefined值,但不能去除null菇绵,如果要去除null肄渗,需要再回調(diào)函數(shù)里進一步判斷。
- forEach():【不會處理undefined的值】需要回調(diào)函數(shù)
function(value元素值,index下標,arr數(shù)組本身)
咬最,返回值始終為undefined翎嫡,循環(huán)過程中無法停止 - map():【不會處理undefined的值,即不傳入回調(diào)函數(shù)處理永乌,但輸出時保留空缺】需要回調(diào)函數(shù)
function(value元素值,index下標,arr數(shù)組本身)}
惑申,返回一個新數(shù)組,其中每一個下標的值為原數(shù)組經(jīng)過回調(diào)函數(shù)處理后return的相應(yīng)值翅雏,原來的undefined會在新數(shù)組中繼續(xù)占位圈驼。
- 應(yīng)用舉例:
a = [4, 5, 6, undefined × 1, 99, undefined × 2] a.map(function(x){if(x === undefined){console.log("uuu")}else{return x*x }}) 運行結(jié)果:輸出:[16, 25, 36, undefined × 1, 9801, undefined × 2] 原數(shù)組a的值不變
- 與forEach比較:
a.forEach(function(x){if(x === undefined){console.log("uuu")}else{return x*x }}) 運行結(jié)果:輸出:undefined,數(shù)組a的值也不變
- 比較結(jié)果:兩者都不會處理undefined望几,forEach不會提前返回绩脆,函數(shù)返回值永遠是Undefined,map永遠返回一個數(shù)組橄抹,數(shù)組中的元素是回調(diào)函數(shù)里面return的值靴迫,原來undefined的值還會在新數(shù)組中原地占位。
- reduce():【不會處理undefined的值】需要回調(diào)函數(shù)
function callbackfn(previousValue, currentValue, currentIndex, array1)
楼誓,每次傳入兩個元素值矢劲,經(jīng)過一系列化簡處理,最終得到一個值慌随,返回芬沉。應(yīng)用舉例:累加
- 函數(shù)完整參數(shù):
array1.reduce(callbackfn[, initialValue])
every():【也不處理undefined的值】有回調(diào),檢查是否每個value都滿足回調(diào)函數(shù)返回true,否則返回false
some():有回調(diào)阁猜,只要有一個value令回調(diào)函數(shù)返回true,則some返回true
-
find():有回調(diào)丸逸,返回回調(diào)函數(shù)里面第一個返回true的value。
function isBigEnough(element) { return element >= 15; } [12, 5, 8, 130, 44].find(isBigEnough); // 130
-
findIndex():有回調(diào)剃袍,返回回調(diào)函數(shù)里面第一個返回true的value的index
function isBigEnough(element) { return element >= 15; } [12, 5, 8, 130, 44].findIndex(isBigEnough); // index of 3rd element in the Array is returned, it will result in '3'
indexOf():按內(nèi)容查找黄刚,返回第一個找到的index,否則返回-1
var a = [2, 9, 9]; a.indexOf(2); // 0 a.indexOf(7); // -1
- lastIndexOf():反向搜索,其他同上民效。
- Array.from():將DOM-list和arguments這樣的類數(shù)組轉(zhuǎn)化為數(shù)組憔维,使其可以使用數(shù)組原型上的方法涛救。
- Array.entries() : 返回一個新數(shù)組,里面是多個子數(shù)組业扒,每個子數(shù)組的[0]是原數(shù)組的下標,[1]是原數(shù)組下標對應(yīng)的值.
- 例如:
const arr = ['a','b','c'];
let aaa= arr.entries(); // [[0,'a'],[1,'b'],[2,'c']]
應(yīng)用補充:
- 利用數(shù)組方法可以實現(xiàn)數(shù)組的深拷貝:
- var newArr = arr.slice() // 原理:從index=0開始截取直到結(jié)束检吆,返回一個新數(shù)組
- var newArr = arr.concat() // 原理:數(shù)組拼接,返回新數(shù)組