JavaScript陣列方法大全

lcc發表於2021-09-09

建立陣列

var arr = new Array();  // 建立一個陣列
var arr = new Array([size]);  // 建立一個陣列並指定長度,注意不是上限,是長度
var arr = new Array(element0, element1, ..., elementn);  // 建立一個陣列並賦值
var arr = [] // 字面量建立陣列
var arr = Array.of(element0, element1, ..., elementn)  // 將一組值轉換成陣列

Array.from()

將偽陣列變成陣列,就是隻要有length的屬性就可以轉成陣列

let name = "javascript";
console.log(name.length); // 10

let arr = Array.from(name);
console.log(arr); // [ 'j', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't' ]

Array.of()

將一組值轉換成陣列,類似於宣告陣列

let arr = Array.of(10);
let arr2 = Array.of("hello", "world");

console.log(arr); // [ 10 ] 
console.log(arr2); // [ 'hello', 'world' ]

棧方法

後進先出

push()

可以接收任意數量的引數,把它們逐個新增到陣列末尾,並返回修改後陣列的長度

let arr = [1, 2, 3];
arr.push(4);

console.log(arr); // [ 1, 2, 3, 4 ]
console.log(arr.length); // 4

pop()

從陣列末尾移除最後一項,減少陣列的length值,然後返回移除的項

let arr = [1, 2, 3];
let delVal = arr.pop();

console.log(arr); // [ 1, 2]
console.log(delVal); // 3

佇列方法

先進先出

shift()

移除陣列中的第一個項並返回該項,同時將陣列長度減1

let arr = [1, 2, 3];
let delVal = arr.shift();

console.log(delVal); // 1
console.log(arr); // [ 2, 3 ]
console.log(arr.length); // 2

unshift()

在陣列前端新增任意個項並返回新陣列的長度

let arr = [1, 2, 3];
let arrLength = arr.unshift(0);

console.log(arrLength); // 4
console.log(arr); // [ 0, 1, 2, 3 ]

排序方法

reverse()

反轉陣列項的順序

let arr = [1, 2, 3];
arr.reverse();

console.log(arr); // [ 3, 2, 1 ]

sort()

從小到大排序,但它的排序方法是根據陣列轉換字串後來排序的

let arr = [1, 5, 10, 15];

console.log(arr.sort()); // [ 1, 10, 15, 5 ] 原因:它們比較的是轉換的字串值

// 從小到大排序
console.log(arr.sort(compare)); // [ 1, 5, 10, 15 ]
function compare(value1, value2) {
  if (value1 < value2) {
    return -1;
  } else if (value1 > value2) {
    return 1;
  } else {
    return 0;
  }
}

操作方法

concat()

可以基於當前陣列中的所有項建立一個新陣列,不會影響原陣列的值

let arr = [1, 2, 3];
let newArr = arr.concat([4, 5, 6], [7, 8, 9]);

console.log(newArr); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
console.log(arr); // [1, 2, 3]

slice()

它能夠基於當前陣列中的一或多個項建立一個新陣列

  • slice() 方法可以接受一或兩個引數,即要返回項的起始和結束位置
  • 在只有一個引數的情況下,slice() 方法返回從該引數指定位置開始到當前陣列末尾的所有項。
  • 如果有兩個引數,該方法返回起始和結束位置之間的項——但不包括結束位置的項。
  • 注意,slice() 方法不會影響原始陣列
let arr = [1, 2, 3, 4];

let newArr = arr.slice(1, 2);
console.log(newArr); // [ 2 ]

let newArr2 = arr.slice(1);
console.log(newArr2); // [ 2, 3, 4 ]

splice()

刪除:

可以刪除任意數量的項,只需指定2個引數:要刪除的第一項的位置和要刪除的項數。例如,splice(0,2)會刪除陣列中的前兩項。

let arr = [1, 2, 3, 4];

arr.splice(1, 2);
console.log(arr); // [ 1, 4 ]

插入

可以向指定位置插入任意數量的項,只需提供3個引數:起始位置、0(要刪除的項數)和要插入的項。如果要插入多個項,可以再傳入第四、第五,以至任意多個項。例如,splice(2,0,“red”,“green”)會從當前陣列的位置2開始插入字串"red"和"green"。

let arr = [1, 2, 3, 4];

arr.splice(1, 0, "java", "script");
console.log(arr); // [ 1, 'java', 'script', 2, 3, 4 ]

替換

可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定3個引數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等。例如,splice (2,1,“red”,“green”)會刪除當前陣列位置2的項,然後再從位置2開始插入字串"red"和"green"。

let arr = [1, 2, 3, 4];

arr.splice(1, 1, "java", "script");
console.log(arr); // [ 1, 'java', 'script', 3, 4 ]

arr.fill(target, start, end)

使用給定的值,填充一個陣列,ps:填充完後會改變原陣列

  • target – 待填充的元素
  • start – 開始填充的位置-索引
  • end – 終止填充的位置-索引(不包括該位置)
let arr = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8];

// 全部填充5
arr.fill(5);
console.log(arr); // [ 5, 5, 5, 5 ]

// 從索引為1到3填充9
arr2.fill(9, 1, 3);
console.log(arr2); // [ 5, 9, 9, 8 ]

Array.isArray(arr)

判斷傳入的值是否為陣列

let arr = [];
let obj = {};

console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false

copyWithin(target, start, end)

在當前陣列內部,將制定位置的陣列複製到其他位置,會覆蓋原陣列項,返回當前陣列
引數:

  • target --必選 索引從該位置開始替換陣列項
  • start --可選 索引從該位置開始讀取陣列項,預設為0,如果為負值,則從右往左讀。
  • end --可選 索引到該位置停止讀取的陣列項,預設是Array.length,如果是負值,表示倒數
let arr = [1, 2, 3, 4, 5, 6];

console.log(arr.copyWithin(2, 0)); // [1, 2, 1, 2, 3, 4]
console.log(arr.copyWithin(2, 0, 4)); // [ 1, 2, 1, 2, 1, 2 ]

位置方法

indexOf()和lastIndexOf()

這兩個方法都接收兩個引數:要查詢的項和(可選的)表示查詢起點位置的索引。其中,indexOf()方法從陣列的開頭(位置0)開始向後查詢,lastIndexOf()方法則從陣列的末尾開始向前查詢。

let arr = [1, 2, 3, 2, 1];

// 從0開始查詢值為2的位置
console.log(arr.indexOf(2)); // 1
// 從索引為2開始查詢值為2的位置
console.log(arr.indexOf(2, 2)); // 3

// 倒敘查詢值為2的位置
console.log(arr.lastIndexOf(2)); // 3
// 倒敘查詢值為2的位置
console.log(arr.lastIndexOf(2, 2)); // 1

find()

陣列例項的find方法,用於找出第一個符合條件的陣列成員。它的引數是一個回撥函式,所有陣列成員依次執行該回撥函式,直到找出第一個返回值為true的成員,然後返回該成員。如果沒有符合條件的成員,則返回undefined。

let arr = [1, 2, 3, 4, 5, 6];

let index = arr.find(val => val === 3);
let index2 = arr.find(val => val === 100);

console.log(index); // 3
console.log(index2); // undefined

findIndex()

和陣列例項的findIndex方法的用法與find方法非常類似,返回第一個符合條件的陣列成員的位置,如果所有成員都不符合條件,則返回-1。

let arr = [1, 2, 3, 4, 5, 6];

let index = arr.findIndex(val => val === 3);
let index2 = arr.findIndex(val => val === 100);

console.log(index); // 2
console.log(index2); // -1

includes()

方法返回一個布林值,表示某個陣列是否包含給定的值,與字串的includes方法類似。

let arr = [1, 2, 3, 4, 5, 6];

console.log(arr.includes(3)); // true
console.log(arr.includes(100)); // false

迭代方法

every()

對陣列中的每一項執行給定函式,如果該函式對每一項都返回true,則返回true。

let arr = [1, 2, 3, 4, 5, 6];

// 是否所有的值都大於3
let isTrue = arr.every(value => value > 3);
console.log(isTrue); // false;

filter()

對陣列中的每一項執行給定函式,返回該函式會返回true的項組成的陣列。

let arr = [1, 2, 3, 4, 5, 6];

// 取陣列中大於3的值重新組成新陣列
let newArr = arr.filter(value => value > 3);
console.log(newArr); // [ 4, 5, 6 ]

forEach()

對陣列中的每一項執行給定函式。這個方法沒有返回值。

let arr = [1, 2, 3, 4, 5, 6];

// 迭代陣列的每一項
arr.forEach((item, index) => {
  console.log(item); // 1, 2, 3, 4, 5, 6
})

map()

對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列。

let arr = [1, 2, 3, 4, 5, 6];

// 迭代陣列每個值加上100返回新陣列
let newArr = arr.map(val => val + 100);
console.log(newArr); // [ 101, 102, 103, 104, 105, 106 ]

some()

對陣列中的每一項執行給定函式,如果該函式對任一項返回true,則返回true。

let arr = [1, 2, 3, 4, 5, 6];

// 迭代陣列的每一項,只要有一項符合條件就返回true
let isTrue = arr.some(val => val >= 5);
let isTrue2 = arr.some(val => val > 6);

console.log(isTrue); // true
console.log(isTrue2); // false

reduce()和reduceRight()

這兩個方法都會迭代陣列的所有項,然後構建一個最終返回的值。其中,reduce()方法從陣列的第一項開始,逐個遍歷到最後。而reduceRight()則從陣列的最後一項開始,向前遍歷到第一項。

let arr = [1, 2, 3, 4];

// 從左到右累加結果
let result = arr.reduce((val1, val2) => {
  return val1 + val2;
});

console.log(result); // 10

entries(),keys() 和 values()

ES6 提供三個新的方法——entries(),keys()和values()——用於遍歷陣列。它們都返回一個遍歷器物件,可以用for…of迴圈進行遍歷,唯一的區別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。

let arr = [1, 2, 3];

// entries()是對鍵值對的遍歷
for (let val of arr.entries()) {
  console.log(val);
  /**
   [ 0, 1 ]
   [ 1, 2 ]
   [ 2, 3 ]
   */
}

// keys()是對鍵名的遍歷
for (let val of arr.keys()) {
  console.log(val); // 0 1 2
}

// values()是對鍵值的遍歷
for (let val of arr.values()) {
  console.log(val); // 1 2 3
}

參考資料

  • , by Nicholas C.Zakas (作者) 李松峰 , 曹力 (譯者)
  • , by 阮一峰

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2822976/,如需轉載,請註明出處,否則將追究法律責任。

相關文章