在 JavaScript 中將引數轉換為陣列

Sahil Bhosale 2023年10月12日
  1. 什麼是 JavaScript 中的 arguments 物件
  2. 在 JavaScript 中使用 rest 引數將 arguments 物件轉換為陣列
  3. 在 JavaScript 中使用 Array.from() 方法將 arguments 物件轉換為陣列
  4. 在 JavaScript 中使用陣列文字arguments 物件轉換為陣列
在 JavaScript 中將引數轉換為陣列

什麼是 JavaScript 中的 arguments 物件

arguments 是一個存在於每個函式中的物件。無論你在 JavaScript 中傳遞給函式的什麼引數,這些引數都以物件的形式儲存在此引數列表中。這個物件的鍵是從零開始的數字。要訪問 arguments 物件中存在的值,我們可以使用這些鍵。

這個 arguments 物件可以用作陣列,但它不支援 JavaScript 函式,如 forEachsortfiltermap。因此,如果你想將這些函式與引數物件一起使用,你必須將整個物件轉換為一個陣列。

arguments 物件可以通過多種不同的方式轉換為陣列。我們將關注最流行的方法,例如使用 rest 引數、array.from()array literals。讓我們詳細討論它們中的每一個。

在 JavaScript 中使用 rest 引數將 arguments 物件轉換為陣列

rest 引數允許函式接受可變數量的引數作為輸入。它由 ...args 表示。在這裡,代替 args,你可以給出任何名稱,三個點 ... 被稱為擴充套件運算子。

現在,每當你將 ...args 作為引數傳遞給函式時,這會將引數物件轉換為陣列,你現在可以使用名稱 args 訪問引數物件。

function func(...args) {
  console.log(args);
  console.log(args[0]);
}

func(1, 2, 3);

輸出:

[ 1, 2, 3 ]
1

在這個例子中,我們將引數 1,2,3 作為引數傳遞給函式 func()。由於我們使用了 rest 運算子,我們將以陣列的形式獲得 arguments 物件。我們現在可以在這個陣列上使用各種方法,比如排序或過濾。

在 JavaScript 中使用 Array.from() 方法將 arguments 物件轉換為陣列

另一種將引數物件轉換為陣列的方法是使用方法 Array.from()。在這裡,我們必須在 from() 方法中傳遞引數物件,從而為我們提供一個陣列。你可以將結果陣列儲存到變數中,甚至可以直接訪問該陣列中的元素。

function func() {
  console.log(Array.from(arguments));
  console.log(Array.from(arguments)[0]);
}

func(1, 2, 3);

輸出:

[ 1, 2, 3 ]
1

我們也採用了相同的示例,但唯一的區別是我們使用 Array.from() 並傳入 arguments 物件而不是使用 rest 運算子。你可以使用諸如 Array.from(arguments)[0] 之類的陣列索引來訪問各個元素。這將返回陣列的第一個元素。

在 JavaScript 中使用陣列文字arguments 物件轉換為陣列

array literals 是一個由零個或多個以索引號零開頭的元素組成的列表。在 array literals 中,元素包含在方括號 [] 內。在這裡,每個元素都可以藉助其索引號來訪問。

function func() {
  let args = [].slice.call(arguments);

  console.log(args);
  console.log(args[2]);
}

func(1, 2, 3);

輸出:

[ 1, 2, 3 ]
3

要將引數物件轉換為陣列,我們首先採用了一個空陣列。在該陣列上,我們使用 call() 方法呼叫 slice() 方法。現在 slice() 方法將遍歷傳遞的物件。在這種情況下,它是 arguments 物件,然後它將物件內的所有元素附加到空陣列中。最後,我們將把 this 的結果儲存在一個變數 args 中。

由於此變數現在包含 arguments 物件曾經包含的所有元素,因此你可以使用 args 變數訪問每個元素及其適當的索引號。

作者: Sahil Bhosale
Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

相關文章 - JavaScript Array