Array.prototype.toSpliced()
Array 例項的 toSpliced() 方法是 方法的複製版本。它會返回一個新陣列,其中在給定索引處移除了和/或替換了某些元素。splice()
語法
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。如果
skipCount是0或負數,則不會刪除任何元素。在這種情況下,你應該指定至少一個新元素(見下文)。 item1, …,itemN可選-
要新增到陣列的元素,從
start開始。如果你沒有指定任何元素,
toSpliced()將只從陣列中刪除元素。
返回值
一個新陣列,由 start 之前的所有元素、item1、item2、……、itemN 以及 start + skipCount 之後的所有元素組成。
描述
toSpliced() 方法與 splice() 一樣,可以一次完成多項操作:它從陣列中移除指定數量的元素,從指定的索引開始,然後在同一索引處插入指定的元素。但是,它返回的是一個新陣列,而不是修改原始陣列。因此,被刪除的元素不會從此方法返回,但它們仍然可以在原始陣列中訪問。
toSpliced() 方法從不生成稀疏陣列。如果源陣列是稀疏的,空槽將在新陣列中被 undefined 替換。
toSpliced() 方法是通用的。它只期望 this 值具有 length 屬性和整數鍵屬性。
示例
刪除、新增和替換元素
你可以使用 toSpliced() 來刪除、新增和替換陣列中的元素,並建立一個比使用 slice() 和 concat() 更高效的新陣列。
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() 方法總是建立一個密集陣列。
const arr = [1, , 3, 4, , 6];
console.log(arr.toSpliced(1, 2)); // [1, 4, undefined, 6]
在非陣列物件上呼叫 toSpliced()
toSpliced() 方法讀取 this 的 length 屬性。然後它讀取所需的整數鍵屬性,並將它們寫入新陣列。
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 |
瀏覽器相容性
載入中…