Array.prototype.splice()

splice() メソッドは、in place で既存の要素を取り除いたり、置き換えたり、新しい要素を追加したりすることで、配列の内容を変更します。

構文

let arrDeletedItems = array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

引数

start
配列を変更する開始位置を表すインデックスです。
値が配列の長さより大きい場合は、start は配列の長さに設定されます。この場合、削除される要素はありませんが、このメソッドは追加関数として動作し、提供された item[n*] の数だけ要素を追加します。
値が負数の場合は、配列の末尾から要素数を戻ったところから始まります (-1 が原点で、-n は最後の要素から n 番目であることを意味し、したがってインデックスが array.length - n であるのと同等です)。
start の絶対値が配列の長さよりも大きい場合は、インデックス 0 から始まります。
deleteCount Optional
配列の start から取り除く古い要素の数を示す整数です。
deleteCount 引数が省略された場合、または array.length - start 以上 (つまり、start から始まり、配列に残る要素の数以上の場合) の場合、start 以降のすべての要素が取り除かれます。

メモ: IE8 では、deleteCount が省略された場合はすべての要素を削除しません。

deleteCount0 か負数の場合、どの要素も取り除かれません。この場合、少なくとも 1 つの新しい要素を指定する必要があります (以下参照)。
item1, item2, ... Optional
配列に追加する要素で、start から始まります。要素を指定しなかった場合、splice() は単に配列から要素を取り除きます。

返値

取り除かれた要素を含む配列です。

要素が 1 つのみ削除された場合は、要素数 1 の配列が返されます。

要素が削除されなかった場合、空の配列が返されます。

解説

取り除こうとする要素数と異なる数の要素を挿入するように指定した場合、関数呼び出しが終わったとき配列は初めと異なる長さになります。

index 2 の位置 (3番目の要素の前) から 0 個の要素を削除して "drum" を挿入する

let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2, 0, 'drum')

// myFish は ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed は [], どの要素も取り除かれていない (空配列) 

index 2 の位置 (3 番目の要素の前) から 0 個の要素を削除して、"drum" と "guitar" を挿入する

let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2, 0, 'drum', 'guitar')

// myFish is ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed is [], no elements removed

index 3 の位置 (4番目の要素) から一つ取り除く

let myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']
let removed = myFish.splice(3, 1)

// removed は ["mandarin"]
// myFish は ["angel", "clown", "drum", "sturgeon"]

index 2 の位置 (3 番目の要素) から 1 つ取り除いて "trumpet" を挿入する

let myFish = ['angel', 'clown', 'drum', 'sturgeon']
let removed = myFish.splice(2, 1, 'trumpet')

// myFish は ["angel", "clown", "trumpet", "sturgeon"]
// removed は ["drum"]

index 0 の位置 (先頭の要素) から二つ取り除き、そこへ "parrot" と "anemore" と "blue" を挿入する

let myFish = ['angel', 'clown', 'trumpet', 'sturgeon']
let removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue')

// myFish は ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed は ["angel", "clown"]

配列長 - 3 の位置 (後ろから 3番目) から 2 つ取り除く

let myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon']
let removed = myFish.splice(-3, 2)

// myFish は ["parrot", "anemone", "sturgeon"]
// removed は ["blue", "trumpet"]

index -2 の位置 (後ろから 2番目) から 1 つ取り除く

let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(-2, 1)

// myFish は ["angel", "clown", "sturgeon"]
// removed は ["mandarin"]

index 2 の位置 (3番目の要素) から末端までを取り除く

let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2)

// myFish は ["angel", "clown"]
// removed は ["mandarin", "sturgeon"]

仕様

ブラウザーの互換性

BCD tables only load in the browser

関連情報

  • push() / pop() - 配列末尾の要素の追加 / 削除
  • unshift() / shift() - 配列先頭の要素の追加 / 削除
  • concat() - 配列に他の配列や値をつないでできた新しい配列を返す