關於ES三、ES五、ES6以及ES7全部數組的方法(api)的總結

原由:工做用常常用到操做數組的方法,這裏進行一下總結,我儘可能以簡潔的語言歸納每一個方法(api)的做用。若是您想快速定位,能夠Control+F 而後搜相應的方法便可定位 ;)

ES3的數組方法


join();

  • 目的:將數組轉化爲字符串.
  • 參數:or可傳一個參數(傳超過1個的參數,默認取第一個參數), 參數爲字符或字符串,參數將在數組的每一個元素的間隔插入。PS: 參數無的時候,數組元素間隔爲 ','.
  • 是否改變原數組: 不改變原數組, 返回一個新的字符串.
  • 逆向操做:String.split().

reverse();

  • 目的:將數組中的元素顛倒順序.
  • 參數:無(無視參數).
  • 是否改變原數組: 改變原來的數組.

sort();

  • 目的:將數組的元素按照必定規則排序.
  • 參數:or可傳一個函數(傳超過1個的函數,默認取第一個函數)。PS: 參數無的時候數組元素默認按照字母表順序排序.
  • 函數參數:
    > 你必須給sort()方法傳遞一個比較函數,因此通常傳遞倆個參數.PS:第三個參數默認undefined.
    > 假設第一個參數應該在前,你應該返回一個小於0的數值,
    > 不然,你應該返回一個大於0的數值,
    > 假設倆個值相等(也就是說他們的排序可有可無),函數應該返回0.
    > PS:數組元素是從前到後 倆倆比較.es6

  • 是否改變原數組: 改變原來的數組.api

concat();

  • 目的:像膠水同樣,將參數粘合在數組後面.
  • 參數:字符串數組(參數不限)。
    > 當參數爲數組時,粘合的是數組的元素,而非數組自己.
    > 但此方法不會扁平化數組參數(換句話說,若是你的參數是個數組,裏面又嵌套了超過1個數組,這個裏面的數組的元素不會被提取出來粘合,而是整個數組被粘合在新的數組後面).
  • 是否改變原數組:不改變原數組, 返回一個新的數組.

slice();

  • 目的:返回數組的一個片斷或子數組.
  • 參數:or一個參數or倆個參數
    > 無參數將原樣返回一個新的數組,至關於複製了一遍數組.
    > 返回的數組包含第一個參數指定的位置,到第二個參數前面一個位置之間的全部元素.
    > 若是隻指定一個參數,返回的數組將包含從開始位置到結尾的全部元素.
    > 若是參數中出現負數,它表示相對於數組中的最後一個元素的位置的個數.
  • 是否改變原數組: 不改變原數組, 返回一個新的數組.

splice();

  • 目的:從數組中刪除元素、插入元素、或者同時完成這倆種操做.
  • 參數:前倆個參數指定了刪除,從第三個參數開始,指定拼接
    > 第二個參數指定了應該從數組中刪除元素的個數,若省略,從起始點到數組結尾的全部元素都將被刪除.
    > 第三個參數開始,指被拼接到原數組的元素,區別於concat(), splice()會插入數組自己而非數組的元素(會扁平化數組)數組

  • 是否改變原數組: 改變原來的數組.函數

push()和pop();

  • 目的:向數組中插入或刪除元素.
  • 參數:push()方法不限制參數,並不會扁平化數組。pop()方法無視參數.
  • 行爲:相似棧,從尾部插入或刪除值,push()方法返回數組長度,pop()方法返回被刪除的值.
  • 是否改變原數組: 改變原來的數組.

unshift()和shift();

  • 目的:向數組中插入或刪除元素.
  • 參數:unshift()方法不限制參數,並不會扁平化數組,當參數爲一連串元素時,參數相似於被粘合在數組的頭部,而不是改變參數的順序。shift()方法無視參數.
  • 行爲:倆組方法和上面的方法相似,區別在於這組方法是在數據的頭部操做.
  • 是否改變原數組: 改變原來的數組.

toString()和toLocaleString();

  • 目的::將數組的每一個方法轉化爲字符串,而且輸出用逗號分隔的字符串列表.
  • 參數:倆個方法無視參數.
  • 是否改變原數組: 不改變原數組, 返回一個新的字符串.

ES5的數組方法


map();

  • 目的:將數組的每一個元素傳遞給指定的函數,並返回一個數組,它包含該函數的返回值.
  • 參數:一個帶有return的函數(函數中的return的值將被傳遞給新數組).
  • 是否改變原數組: 不改變原數組,返回一個新數組。PS: 若是原數組是個稀疏數組,返回的也是相同方式的稀疏數組,它具備相同的長度,相同的稀缺元素.

filter();

  • 目的:將數組的每一個元素傳遞給指定的函數,並返回一個數組,它包含該函數的返回值.
  • 參數:一個帶有return的函數(函數中的返回值若是爲true或者能轉化爲true的值,就被添加到這個數組).
  • 是否改變原數組: 不改變原數組,返回一個新數組,新數組是原數組的子集。PS: 若是原數組是個稀疏數組,和上面不同,它返回的數組老是稠密的.

every()和some();

  • 目的:對數組元素應用指定的函數斷定.
  • 參數:兩者都須要一個函數.
    > every() 返回true須要知足的條件爲:數組中全部元素在函數斷定下都爲true則返回true,不然返回false. (PS:跟他的的漢語意思同樣,每一個)
    > some() 返回true須要知足的條件爲:數組中有一個元素在函數斷定下爲true則返回true, 不然返回false. ((PS:跟他的的漢語意思同樣,一些)
    > note: 執行every() 時,如有一個參數爲false,則返回,忽略執行後面的參數.
    > note: 而some() 則相反,如有一個參數爲true, 則返回, 忽略執行後面的參數.
  • 對於空數組every() 返回true, some()返回 false.

reduce()和reduceRight();(不太經常使用,偏用於數學計算)

  • 目的:使用指定的函數將數組元素進行組合,生成單個值.
  • 參數:reduce() 函數的第一個參數是執行化簡操做的函數.第二個是傳遞給函數的初始值(若是無,函數將把數組中的第一個元素做爲其初始值).
    > 空數組上,不帶初始值參數調用此函數將會報錯.
    > 若是隻有一個元素且沒有指定初始值,或者有一個空數組而且指定了一個初始值,reduce() 只是簡單地返回那個值而不會調用化簡函數.
    > reduceRight()reduce() 做用同樣, 區別在於它執行的順序是從右到左.
  • 是否改變原數組: 不改變原數組,返回一個新數組。

indexOf()和lastIndexOf()

  • 目的:搜索數組中具備給定值的元素。
  • 參數:第一個參數指的是須要搜索的值,返回則找到第一個元素的索引或者若是沒有找到就返回-1.
    第二個參數是可選的,它指定數組中的一個索引,表示從哪裏開始搜索,能夠是負數,它表明相對於數組末尾的個數。最後一個元素是-1,倒數第二個元素爲-2,以此類推...
  • lastIndexOf() 指從前日後查詢. lastIndexOf() 指從後往前查詢.

ES6的數組方法


Array.from();

  • 目的:將類數組對象和可遍歷對象轉化爲數組.
  • 參數:上述對象以及第二個參數。第二個參數相似於數組中的map方法,用來對每一個元素進行處理,將處理後的值放入返回的數組.
  • 用法:const toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj) )(); (兼容寫法).

Array.of();

  • 目的:將一組值轉化爲數組.
  • 參數:無或無限(無時返回一個空數組).

copyWithin();

  • 目的:在數組內部,將指定位置的成員複製到其餘位置(會覆蓋原有成員).
  • 參數:target(必須): 從該位置開始替換數據.
    > start(可選):從該位置開始讀取數據.
    > end(可選):到該位置的前一個位置.
  • 是否修改原數組:修改原數組.

find()和findIndex();

  • 目的:在數組內部, 找到第一個符合條件的數組成員.
  • 參數:回調函數接受三個參數,分別表示當前值,當前位置,原數組.
    倆個方法都接受第二個參數用來綁定函數中的this的值.(綁定做用域).
  • PS: 這兩個方法均可以發現NaN,彌補了數組的IndexOf() 方法的不足。

fill();

  • 目的:如其意,填充一個數組.
  • 參數:第一個參數表示被填充的元素.
    第二個參數表示填充的起始位置.
    第三個參數表示填充的結束位置(指定位置以前一個).

ES7的數組方法

includes();

  • 目的:表示某個數組是否包含給定的值,與字符串的includes()方法相似.
  • 參數:第一個參數表示要查找的數,第二個參數表示搜索的起始位置,返回一個布爾值.
  • 意義:推薦使用這個而不是indexOf()由於後者會對NaN形成誤判.
相關文章
相關標籤/搜索