Array.prototype.toSpliced()

Baseline 2023
新推出

自 2023 年 7 月以來,此功能可在最新的裝置和瀏覽器版本上執行。此功能可能不適用於舊裝置或瀏覽器。

Array 例項的 toSpliced() 方法是 splice() 方法的複製版本。它會返回一個新陣列,其中在給定索引處移除了和/或替換了某些元素。

語法

js
toSpliced(start)
toSpliced(start, skipCount)
toSpliced(start, skipCount, item1)
toSpliced(start, skipCount, item1, item2)
toSpliced(start, skipCount, item1, item2, /* …, */ itemN)

引數

start

從陣列開始更改的零基索引,轉換為整數

  • 負數索引從陣列末尾開始計數——如果 -array.length <= start < 0,則使用 start + array.length
  • 如果 start < -array.length 或省略了 start,則使用 0
  • 如果 start >= array.length,則不會刪除任何元素,但該方法會像新增函式一樣,新增提供的所有元素。
skipCount 可選

一個整數,表示從 start 開始要從陣列中刪除(或跳過)的元素數量。

如果省略 skipCount,或者其值大於或等於 start 指定位置之後的元素數量,則將刪除從 start 到陣列末尾的所有元素。但是,如果你想傳遞任何 itemN 引數,你應該將 Infinity 作為 skipCount 來傳遞,以刪除 start 之後的所有元素,因為顯式的 undefined 會被轉換0

如果 skipCount0 或負數,則不會刪除任何元素。在這種情況下,你應該指定至少一個新元素(見下文)。

item1, …, itemN 可選

要新增到陣列的元素,從 start 開始。

如果你沒有指定任何元素,toSpliced() 將只從陣列中刪除元素。

返回值

一個新陣列,由 start 之前的所有元素、item1item2、……、itemN 以及 start + skipCount 之後的所有元素組成。

描述

toSpliced() 方法與 splice() 一樣,可以一次完成多項操作:它從陣列中移除指定數量的元素,從指定的索引開始,然後在同一索引處插入指定的元素。但是,它返回的是一個新陣列,而不是修改原始陣列。因此,被刪除的元素不會從此方法返回,但它們仍然可以在原始陣列中訪問。

toSpliced() 方法從不生成稀疏陣列。如果源陣列是稀疏的,空槽將在新陣列中被 undefined 替換。

toSpliced() 方法是通用的。它只期望 this 值具有 length 屬性和整數鍵屬性。

示例

刪除、新增和替換元素

你可以使用 toSpliced() 來刪除、新增和替換陣列中的元素,並建立一個比使用 slice()concat() 更高效的新陣列。

js
const months = ["Jan", "Mar", "Apr", "May"];

// Inserting an element at index 1
const months2 = months.toSpliced(1, 0, "Feb");
console.log(months2); // ["Jan", "Feb", "Mar", "Apr", "May"]

// Deleting two elements starting from index 2
const months3 = months2.toSpliced(2, 2);
console.log(months3); // ["Jan", "Feb", "May"]

// Replacing one element at index 1 with two new elements
const months4 = months3.toSpliced(1, 1, "Feb", "Mar");
console.log(months4); // ["Jan", "Feb", "Mar", "May"]

// Original array is not modified
console.log(months); // ["Jan", "Mar", "Apr", "May"]

在稀疏陣列上使用 toSpliced()

toSpliced() 方法總是建立一個密集陣列。

js
const arr = [1, , 3, 4, , 6];
console.log(arr.toSpliced(1, 2)); // [1, 4, undefined, 6]

在非陣列物件上呼叫 toSpliced()

toSpliced() 方法讀取 thislength 屬性。然後它讀取所需的整數鍵屬性,並將它們寫入新陣列。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  0: 5,
  2: 4,
};
console.log(Array.prototype.toSpliced.call(arrayLike, 0, 1, 2, 3));
// [2, 3, undefined, 4]

規範

規範
ECMAScript® 2026 語言規範
# sec-array.prototype.tospliced

瀏覽器相容性

另見