數組的api概括總結

1.小工具

  • Array.length
    除了直接拿來用,還能夠判斷數組是否爲空,也能夠直接截短數組(不經常使用)。

[1, 2, 3, 4, 5].length = 2   // [1, 2]複製代碼

  • Array.isArray
    使用此方法適合用於判斷數組類型,返回的是布爾值。
  • Array.from
    類數組對象轉數組, 像DOM的一些集合,arguments,還有Set/Map/String等具備遍歷器接口的數據結構均可以轉換。

let a = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    }
    let b = Array.from(a)   // ['a', 'b', 'c']複製代碼

  • Array.of
    用於將一組值轉換爲數組。Array.of() 基本上能夠用來替代 Array() 或 new Array() ,而且不存在因爲參數不一樣而致使的重載,它的行爲很是統一。Array.of() 老是返回參數值組成的數組。若是沒有參數,就返回一個空數組。

Array.of(3, 11, 8)      // [3,11,8]
    Array.of(3)         // [3]
    Array.of()          // []複製代碼

  • fill
    填充一個數組,用於空數組的初始化很是方便。數組中已有的元素,會被所有抹去。該方法還能夠接受第二個和第三個參數,用於指定填充的起始位置和結束位置。(含頭不含尾)

['a', 'b', 'c'].fill(7, 1, 2)  //['a', 7, 'c']複製代碼

2.增刪改查

  • pop
    刪除並返回數組的最後一個元素。若是數組爲空,則返回undefined。
  • push
    向數組的末尾添加一個或多個元素,並返回新的長度。
  • shift
    把數組的第一個元素從其中刪除,並返回第一個元素的值。
  • unshift
    向數組的開頭添加一個或更多元素,並返回新的長度。
  • find
    用於找出第一個符合條件的數組成員。它的參數是一個回調函數,全部數組成員依次執行該回調函數,直到找出第一個返回值爲true的成員,而後返回該成員。若是沒有符合條件的成員,則返回undefined。

[1, 5, 10, 15].find(function(value, index, arr) {
      return value > 9;
    })      // 10複製代碼

  • findIndex
    數組實例的findIndex方法的用法與find方法很是相似,返回第一個符合條件的數組成員的位置,若是全部成員都不符合條件,則返回-1。

[1, 5, 10, 15].findIndex(function(value, index, arr) { return value > 9; }) // 2複製代碼

  • indexOf /lastIndexOf
    返回某個指定的字符串值在字符串中首次/最後一次出現的位置, 對大小寫敏感。 若是要檢索的字符串值沒有出現,則該方法返回 -1

"Hello world!".indexOf("Hello")  // 0複製代碼

  • includes
    返回一個布爾值,表示某個數組是否包含給定的值

[1, 2, 3].includes(2)     // true複製代碼

  • slice(start, end)
    返回一個新的數組,包含從 start 到 end (不包括)
    start: 必需。
    end:可選。負數表示從末位開始算
  • splice(index, num, item1,..., itemx)
    用於添加或刪除數組中的元素。會改變原始數組。
    index:必需。規定從何處添加/刪除元素。
    num: 要刪除的數量,
    item1, ..., itemx是可選參數,表示要添加到數組的新元素
  • concat
    用於鏈接兩個或多個數組
  • join
    返回一個經過指定的分隔符進行分隔的一個字符串
  • copyWithin(target, start, end)
    在當前數組內部,將指定位置的成員複製到其餘位置(會覆蓋原有成員),而後返回當前數組。(ps: 此方法目前我還沒用到過)
    target(必需):從該位置開始替換數據。若是爲負值,表示倒數。
    start(可選):從該位置開始讀取數據,默認爲 0。若是爲負值,表示從末尾開始計算。 end(可選):到該位置前中止讀取數據,默認等於數組長度。若是爲負值,表示從末尾開始計算。 

[1, 2, 3, 4, 5].copyWithin(0, 3)     // [4, 5, 3, 4, 5]複製代碼

3.迭代相關方法

  • forEach
    讓數組的每一項都執行給定的函數。由於返回值是undefined,因此不能鏈式調用。使用breakreturn語句不能使其停止或者跳出forEach循環,除非拋出異常。(ps: 本人用的不多 ,通常會選擇其餘迭代api或者普通的for循環就很好)
  • for...in
    能夠用於對數組或者對象的屬性進行循環操做。
    注意:for..in遍歷對象的時候,會把其原型(prototype)中方法與屬性給遍歷出來,能夠在循環裏使用對象的hasOwnProperty()方法去判斷,來避免這個問題。或者直接選用ObjectAPIkeys/enenties/values 去遍歷對象
  • for...of
    for...of 容許你遍歷 DOM集合,Array(數組), String(字符串), Map(映射), Set(集合)等可迭代的數據結構等。
  • keys/enenties/values
    ES6 提供的三個新方法——entries()、keys()和values()——用於遍歷數組。它們都返回一個遍歷器對象,能夠用for...of循環進行遍歷,惟一的區別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。
  • every
    對數組中每一項運行給定函數,若是該函數的每一項都符合條件,則返回true
  • some
    對數組中每一項運行給定函數,若是該函數有一項符合條件,則返回true
  • filter
    每一個數組項調用給定函數,條件爲true的將返到一個新數組中
  • map
    每一個數組項調用給定函數,返回每次函數調用的結果組成一個新數組。
  • sort
    主要用於對數組的元素進行排序。若是沒有傳參將按字母順序(字符編碼順序)對數組中的元素進行排序,若是想按照其餘標準進行排序,就須要進行傳一個回調函數,該函數要比較兩個值用於排序
  • reverse
    用於顛倒數組中元素的順序。該方法會改變原來的數組,而不會建立新的數組。
  • flat
    用來'拉平'數組。默認只會「拉平」一層,若是想要「拉平」多層的嵌套數組,參數能夠傳數字,表示想要拉平的層數。 傳Infinity參數,表示無論有多少層嵌套,都要轉成一維數組
  • flatMap
    參數是一個遍歷函數, 對原數組的每一個成員執行map,而後對返回值組成的數組執行flat()方法。該方法返回一個新數組,不改變原數組。通俗說,就是先map,再拉平一層
  • reduce
    此方法接收兩個參數:一個是回調函數,一個是初始值。
    回調經常使用的參數只有兩個:prev cur。接下來咱們跟着實例來看看具體用法吧~ 利用reduce來計算一個字符串中每一個字母出現次數。

const str = 'jshdjsihh';
    const obj = str.split('').reduce((pre, cur) => {
       pre[cur] ? pre[cur]++ : pre[cur] = 1
       return pre
    }, {})
    console.log(obj)     // {j: 2, s: 2, h: 3, d: 1, i: 1}複製代碼

4.數組api對於空位的處理

數組的空位指,數組的某一個位置沒有任何值。好比,api

[,,,1,2,3]

ES6 是明確將空位轉爲undefined,因爲空位的處理規則很是不統一,因此建議避免出現空位。數組


  • foreach(), filter(), reduce(), every()some()都會跳過空位。
  • map()不會遍歷空位,直接跳過,但會保留這個空位。

    let a = [1, , , 2]
    let b = a.map(item => ++item)    // [2, empty × 2, 3]複製代碼

  • for...of循環會遍歷空位, 直接將空位轉爲undefined。

    let a = [1, , , 2]
    for (let i of a) {
        console.log(i)
    }                       // 1, undefined, undefined, 2複製代碼

  • for...in循環不會遍歷空位,直接跳過。

    var a=[,,,2,3,]
    for(let i in a){
       console.log(i)
    }                   // 3, 4複製代碼

  • fill()會將空位視爲正常的數組位置,同樣填充覆蓋。

    [, , ,].fill(7)    //[7, 7, 7]複製代碼

  • join()會將空位視爲undefined,而undefinednull會被處理成空字符串。

    [1,,2].join('-')        // "1--2"複製代碼

  • Array.from方法會將數組的空位,轉爲undefined

    Array.from([,,1])    //  [undefined, undefined, 1]複製代碼

  • 擴展運算符(...)也會將空位轉爲undefined

    console.log(...[,,1])        // undefined undefined 1複製代碼

  • copyWithin()會連空位一塊兒拷貝。

  • entries()keys()values()find()findIndex()會將空位處理成undefined
相關文章
相關標籤/搜索