超詳細的js數組方法(總結)


在平時的開發中我們經常會用的數組的內置方法,也是面試最常問到的東西。數組是js中最常用到的數據集合,其內置的方法有很多,熟練掌握這些方法,可以有效的提高我們的工作效率,同時對我們的代碼質量也是有很大影響。

創建數組

  1. 字面量表示
let arr = [] // 創建一個空數組
let arr1 = [1, 2] // 創建一個包含兩項數據的數組
  1. 使用Array構造函數
  • 無參數構造
let arr = new Array() // 創建一個空數組
  • 帶參數構造

如果只傳一個數值參數,則表示創建一個初始長度為指定數值的空數組

let arr = new Array(5) // 創建一個數組長度為5的空數組

如果傳入一個非數值的參數或者參數個數大於 1,則表示創建一個包含指定元素的數組

let arr = new Array(1,2,3) // 創建一個包含3個數值的數組

數組方法大全

數組原型方法主要有以下這些:

  • join():返回值為用指定的分隔符將數組每一項拼接的字符串
  • push():向數組的末尾添加元素,返回值是當前數組的length(修改原數組)
  • pop():刪除數組末尾的元素,返回值是被刪除的元素(修改原數組)
  • shift():刪除首位元素,返回值是被刪除的元素(修改原數組)
  • unshift():向首位添加元素,返回值是數組的長度(修改原數組)
  • slice():返回數組中指定起始下標和結束下標之間的(不包含結束位置)元素組成的新數組
  • splice():對數組進行增刪改(修改原數組)
  • fill():使用特定值填充數組中的一個或多個元素(修改原數組)
  • filter():過濾,數組中的每一項運行給定函數,返回滿足過濾條件組成的數組
  • concat():用於連接兩個或多個數組
  • indexOf():返回當前值在數組中第一次出現位置的索引
  • lastIndexOf():返回查找的字符串最后出現的位置,如果沒有找到匹配字符串則返回 -1。
  • every():判斷數組中每一項是否都符合條件
  • some():判斷數組中是否存在滿足的項
  • includes():判斷一個數組是否包含指定的值
  • sort():對數字的元素進行排序(修改原數組)
  • reverse():對數組進行倒敘(修改原數組)
  • forEach():循環遍歷數組每一項(沒有返回值)
  • map():循環遍歷數組的每一項(有返回值)
  • copyWithin(): 從數組的指定位置拷貝元素到數組的另一個指定位置中(修改原數組)
  • find(): 返回第一個匹配的值,並停止查找
  • findIndex(): 返回第一個匹配值的索引,並停止查找
  • toLocaleString()、toString():將數組轉換為字符串
  • flat()、flatMap():扁平化數組
  • entries() 、keys() 、values():遍歷數組

方法示例

  1. join()
    將所有數組元素結合為一個字符串,它的行為類似 toString(),但是您還可以規定分隔符,原數組不變
let arr = [1, 2, 3, 4, 5]
let arr1 = arr.join()
console.log(arr1)  // 1,2,3,4,5
console.log(arr.join('-')) // 1-2-3-4-5
  1. push()和 pop()
    push() 向數組末尾添加元素,可以添加一個或多個元素
    pop() 刪除數組的最后一個元素並返回刪除的元素
let arr = [1, 2, 3, 4, 5]
let arr1 = arr.push(6, 7)  
console.log(arr1) // 7
console.log(arr) // [1, 2, 3, 4, 5, 6, 7]
let arr = [1, 2, 3, 4, 5]
let arr2 = arr.pop()
console.log(arr2);   // 5
console.log(arr);   // [1, 2, 3, 4]
  1. shift和unshift
    shift刪除首位元素,返回值是被刪除的元素
    unshift 向首位添加元素,返回值是數組的長度
let arr = [1, 2, 3, 4, 5]
let arr2 = arr.shift()
console.log(arr2)  // 1
console.log(arr)  // [2,3,4,5]
let arr = [1, 2, 3, 4, 5]
let arr2 = arr.unshift(0)
console.log(arr2)  // 6
console.log(arr)  // [0,1,2,3,4,5]
  1. slice(起始下標,結束下標)返回數組中指定起始下標和結束下標之間的(不包含結束位置)元素組成的新數組,只有一個參數就返回從該參數下標到當前數組末尾的所有元素,當出現負數時,將負數加上數組長度的值(6)來替換該位置的數
let arr = [1, 2, 3, 4, 5]

let arr1 = arr.slice(1)
console.log(arr1)  //[2, 3, 4, 5]
let arr2 = arr.slice(1,3)
console.log(arr2) // [2, 3]
let arr3 = arr.slice(1, -2)
console.log(arr3) // [2, 3]
console.log(arr) // [1, 2, 3, 4, 5]
  1. splice()
  • splice(index, howmany, item1, ....., itemX)
    index 必需。指定在什么位置添加/刪除項目,使用負值指定從數組末尾開始的位置。
    howmany 可選。要刪除的項目數。如果設置為 0,則不會刪除任何項目。
    item1, ..., itemX 可選。要添加到數組中的新項目。
let arr = [1, 2, 3, 4, 5]
let arr1 = arr.splice(0, 2, 6, 7);
console.log(arr) // [6, 7, 3, 4, 5]
console.log(arr1) // [1, 2]
  1. fill(value, start, end)es6新增
    使用制定的元素填充數組,其實就是用默認內容初始化數組
    value:填充值。
    start:填充起始位置,可以省略。
    end:填充結束位置,可以省略,實際結束位置是end-1。
let arr = [1, 2, 3, 4, 5]
let arr1 = arr.fill(6);
console.log(arr1) // [6, 6, 6, 6, 6]
console.log(arr) // [6, 6, 6, 6, 6]

let arr2 = arr.fill(6, 1, 2);
console.log(arr2) // [1, 6, 3, 4, 5]
  1. filter()
let arr = [1, 2, 3, 4, 5]
let arr2 = arr.filter(function(item, index) {
 return index % 3 === 0 || item >= 4;
})
console.log(arr2);  //[1, 4, 5]
  1. concat()
    用於連接兩個或多個數組,不會改變原有數組返回一個數組的副本
let arr = [1, 2, 3, 4, 5]
let arr1 = ['a', 'b', 'c', 'd']

let arr3= arr.concat(6,arr1)
console.log(arr)  // [1, 2, 3, 4, 5]
console.log(arr1)  // ['a', 'b', 'c', 'd']
console.log(arr3)  // [1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd']

可以看到第一個參數不是數組,但concat方法還是把它拼接到了arr數組的后面
10. indexOf(item,start)和lastIndexOf(item,start)
item 查找的元素
start 可選的整數參數。開始檢索的位置。如省略該參數,則將從字符串的首字符開始檢索。
item 查找的元素
start 可選的整數參數。開始檢索的位置。如省略該參數,則將從字符串的最后一個字符處開始檢索。

let arr = [1, 2, 3, 4, 5, 6, 3]
console.log(arr.indexOf(3)) // 2
console.log(arr.lastIndexOf(3)) // 6
console.log(arr.indexOf(3, 2)) // 2
console.log(arr.lastIndexOf(3,4)) // 2
console.log(arr.indexOf("3")) // -1
  1. every()判斷數組中每一項都是否滿足條件,只有所有項都滿足條件,才會返回 true。
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
let arr2 = arr.every(function(x) {
 return x < 10;
})
console.log(arr2);  // false
let arr3 = arr.every(function(x) {
 return x < 20;
})
console.log(arr3);  // true
  1. some()判斷數組中是否存在滿足條件的項,只要有一項滿足條件,就會返回 true
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
let arr2 = arr.some(function(x) {
 return x < 10
});
console.log(arr2);  // true
let arr3 = arr.some(function(x) {
 return x > 20
});
console.log(arr3);  // false
  1. includes(searchElement,fromIndex) es7 新增,檢測數組中是否包含一個指定的值,如果是返回true,否則false。
    searchElement 需要查找的元素
    fromIndex 可選。從該索引處開始查找,默認為 0。
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
let arr1 = arr.includes(31);
console.log(arr1); // false
let arr2 = arr.includes(6, 3)
console.log(arr2); // true
  1. sort()
    對數組元素排序,沒有參數時按照字母順序(字符編碼的順序)進行排序
let arr1 = ["a", "d", "c", "b"];
console.log(arr1.sort());   // ["a", "b", "c", "d"]
let arr2 = [13, 24, 51, 3];
console.log(arr2.sort());   // [13, 24, 3, 51]
console.log(arr2);   // [13, 24, 3, 51](原數組被改變)

array.sort(compareFunction)可以通過提供“比較函數”來排序,該函數應返回負值、零值或正值,具體取決於參數,例如:
function(a, b){return a-b}
如果第一個參數應該位於第二個之前則返回一個負數,如果兩個參數相等則返回 0,如果第一個參數應該位於第二個之后則返回一個正數。
15. reverse()
用於顛倒數組中元素的順序

let arr = [13, 24, 51, 3];
console.log(arr.reverse());   //[3, 51, 24, 13]
console.log(arr);   //[3, 51, 24, 13](原數組改變)
  1. forEach()對數組進行遍歷循環,對數組中的每一項運行給定函數。沒有返回值
    array.forEach(function(currentValue, index, arr),thisValue)

function(currentValue, index, arr) 必需。為數組中的每個元素運行的函數。

  • currentValue 必需。當前值。
  • index 可選。索引。
  • arr 可選。當前元素所屬的數組對象
    thisValue 可選。要傳遞給函數以用作其 "this" 值的值。如果此參數為空,則值 "undefined" 將作為其 "this" 值傳遞。
let arr = [1, 2, 3, 4]
arr.forEach((item,index,ar) => {
  console.log(item + '|' + index + '|' + (ar === arr))
})
1|0|true
2|1|true
3|2|true
4|3|true
  1. map()對數組中的每一項運行給定函數並返回處理后的值,不會改變原數組
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
let arr2 = arr.map(function(item){
 return item + 1
});
console.log(arr2) // [2, 3, 4, 5, 6, 7, 11, 12]
console.log(arr) // [1, 2, 3, 4, 5, 6, 10, 11]
  1. copyWithin(target, start, end) [es6 新增]從數組的指定位置拷貝元素到數組的另一個指定位置中
    target 必需。復制到指定目標索引位置。
    start 可選。元素復制的起始位置。
    end 可選。停止復制的索引位置 (默認為 array.length)。如果為負值,表示倒數。
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
arr.copyWithin(1, 2, 3);
console.log(arr) // [1, 3, 3, 4, 5, 6, 10, 11]
  1. find((currentValue, index, arr) => {}, thisValue)和 findIndex((currentValue, index, arr) => {}, thisValue)
    (currentValue, index, arr) => {} 必需。為數組中的每個元素運行的函數。
  • currentValue 必需。當前元素值。
  • index 可選。當前元素的索引。
  • arr 可選。當前元素所屬的數組對象
    thisValue 可選。要傳遞給函數以用作其 "this" 值的值。如果此參數為空,則值 "undefined" 將作為其 "this" 值傳遞。
    二者的區別是:find()方法返回匹配的值,而 findIndex()返回匹配位置的索引。
let arr = [1, 2, 3, 4, 5, 6, 10, 11]
let a = arr.find((value, keys, arr) => {
    return value > 2;
}) 
console.log(a) // 3 返回匹配的值
let b = arr.findIndex((value, keys, arr) => {
    return value > 2;
}) 
console.log(b) // 2 返回匹配位置的索引

find()和findIndex()方法都會在回調函數第一次查找結果為true時停止查找並返回第一個匹配的值
20. toLocaleString()和toString()講數組轉換為字符串

let arr = [1, 2, 3, 4, 5, 6, 10, 11]
const str = arr.toLocaleString();
const str1 = arr.toString()
console.log(str); // 1,2,3,4,5,6,10,11
console.log(str1); // 1,2,3,4,5,6,10,11
  1. flat()、flatMap() [es6 新增]
    flat()返回一個扁平化的數組
    參數: 指定要提取嵌套數組的結構深度,使用Infinity,可展開任意深度的嵌套數組,默認值為 1
let arr = [0, 1, 2, [3, 4]]
let arr1 = arr.flat()
console.log(arr) // [0, 1, 2, [3, 4]]
console.log(arr1) // [0, 1, 2, 3, 4]

let arr2 = [0, 1, 2, [[[3, 4]]]]
let arr3 = arr2.flat(2)
console.log(arr3) // [0, 1, 2, [3, 4]]

let arr4 = arr2.flat(Infinity)
console.log(arr4)// [0, 1, 2, 3, 4]

// 如果原數組有空項,flat()方法會跳過空項
let arr5 = [1, 2, , 4, 5];
let arr6 = arr5.flat();
console.log(arr6) // [1, 2, 4, 5]

flatMap()對數組的每個成員執行函數,相當於執行Array.prototype.map(),然后對返回值組成的數組執行flat()方法。

// 相當於 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]
  1. entries() 、keys() 、values()[es6 新增]
    entries(),keys()和values() —— 用於遍歷數組。它們都返回一個遍歷器對象,可以用for...of循環進行遍歷
    區別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷
let arr = ['a', 'b', 'c', 'd']
for (let index of arr.keys()) {  
  console.log(index)
}  
// 0  
// 1  
// 2
// 3
for (let item of arr.values()) {  
  console.log(item)
}  
// a   
// b   
// c
// d
for (let [index, item] of arr.entries()) {  
  console.log(index, item)
}  
// 0 "a"  
// 1 "b"
// 3 "c"  
// 4 "d"

或者手動調用遍歷器對象的next方法,進行遍歷

let arr = ['a', 'b', 'c', 'd']
let item = arr.entries()
console.log(item.next().value) // [0,  a ]  
console.log(item.next().value) // [1,  b ]  
console.log(item.next().value) // [2,  c ]
console.log(item.next().value) // [3,  d ]
console.log(item.next().value) // undefined


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM