js--常用的Array數(shù)組方法

  • 關(guān)于數(shù)組長度:

  • 如果為一個數(shù)組元素賦值,它的索引 i 大于或等于現(xiàn)有數(shù)組的長度時,length的值會自動設(shè)置為 i+1

  • 設(shè)置length為一個小于當(dāng)前長度的非負(fù)整數(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ù)組:
  1. pop()
  2. push()
  3. shift()
  4. unshift():以上,都是返回添加或刪除的單個元素
  5. reverse():返回位置逆序數(shù)組,非大小逆序
  • undefined也會參與逆序占位,并輸出
  1. sort():返回排序后的數(shù)組
  • 默認(rèn)是按字母表排序
  • 傳入回調(diào)函數(shù)時,假設(shè)第一個參數(shù)應(yīng)該在前,就要返回一個大于0的數(shù)值,所以按從小到大排序時:function(a,b){return a-b }
  • undefined會被排在最后,也會占位輸出
  1. splice():返回被刪除的片段
不改變原數(shù)組:
  1. concat():a.concat([4,5]),返回拼接后的新數(shù)組
  2. slice():參數(shù)start,end,包前不包后,返回被切除的片段。參數(shù)可以為負(fù),此時實(shí)際的索引值為用長度加上該負(fù)值以后的值,如果start小于end,則返回空數(shù)組。
  • 例: 長度為5的數(shù)組,slice(-2,-1),實(shí)際指的是slice(3,4)
  1. 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ù)里進(jìn)一步判斷。
  1. forEach():【不會處理undefined的值】需要回調(diào)函數(shù)function(value元素值,index下標(biāo),arr數(shù)組本身),返回值始終為undefined,循環(huán)過程中無法停止
  2. map():【不會處理undefined的值,即不傳入回調(diào)函數(shù)處理,但輸出時保留空缺】需要回調(diào)函數(shù)function(value元素值,index下標(biāo),arr數(shù)組本身)},返回一個新數(shù)組,其中每一個下標(biāo)的值為原數(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 }}) 運(yùn)行結(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 }}) 運(yùn)行結(jié)果:輸出:undefined,數(shù)組a的值也不變
  • 比較結(jié)果:兩者都不會處理undefined,forEach不會提前返回,函數(shù)返回值永遠(yuǎn)是Undefined,map永遠(yuǎn)返回一個數(shù)組,數(shù)組中的元素是回調(diào)函數(shù)里面return的值,原來undefined的值還會在新數(shù)組中原地占位。
  1. reduce():【不會處理undefined的值】需要回調(diào)函數(shù)function callbackfn(previousValue, currentValue, currentIndex, array1),每次傳入兩個元素值,經(jīng)過一系列化簡處理,最終得到一個值,返回。應(yīng)用舉例:累加
  • 函數(shù)完整參數(shù):array1.reduce(callbackfn[, initialValue])
  1. every():【也不處理undefined的值】有回調(diào),檢查是否每個value都滿足回調(diào)函數(shù)返回true,否則返回false

  2. some():有回調(diào),只要有一個value令回調(diào)函數(shù)返回true,則some返回true

  3. find():有回調(diào),返回回調(diào)函數(shù)里面第一個返回true的value。

    • function isBigEnough(element) { return element >= 15; } [12, 5, 8, 130, 44].find(isBigEnough); // 130
  4. 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'
  5. indexOf():按內(nèi)容查找,返回第一個找到的index,否則返回-1

  • var a = [2, 9, 9]; a.indexOf(2); // 0 a.indexOf(7); // -1
  1. lastIndexOf():反向搜索,其他同上。
  2. Array.from():將DOM-list和arguments這樣的類數(shù)組轉(zhuǎn)化為數(shù)組,使其可以使用數(shù)組原型上的方法。
  3. Array.entries() : 返回一個新數(shù)組,里面是多個子數(shù)組,每個子數(shù)組的[0]是原數(shù)組的下標(biāo),[1]是原數(shù)組下標(biāo)對應(yīng)的值.
  • 例如:
    const arr = ['a','b','c'];
    let aaa= arr.entries(); // [[0,'a'],[1,'b'],[2,'c']]

應(yīng)用補(bǔ)充:

  • 利用數(shù)組方法可以實(shí)現(xiàn)數(shù)組的深拷貝:
  • var newArr = arr.slice() // 原理:從index=0開始截取直到結(jié)束,返回一個新數(shù)組
  • var newArr = arr.concat() // 原理:數(shù)組拼接,返回新數(shù)組
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容