Array.prototype.splice()

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

構文

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

引数

start
配列を変更する開始位置を表すインデックスです。値が配列の長さより大きい場合は、 start は配列の長さに設定されます。値が負数の場合は、配列の末尾から要素数を戻ったところから始まります (-1 が原点で、 -n は最後の要素から n 番目であることを意味し、したがってインデックスが array.length - n であるのと同等です)。 start の絶対値が配列の長さよりも大きい場合は、インデックス 0 から始まります。
deleteCount Optional
配列の start から取り除く古い要素の数を示す整数です。
deleteCount 引数が省略された場合、または array.length - start 以上 (つまり、 start から始まり、配列に残る要素の数以上の場合) の場合、start 以降のすべての要素が取り除かれます。
deleteCount が 0 か負数の場合、どの要素も取り除かれません。この場合、少なくとも 1 つの新しい要素を指定する必要があります。
item1, item2, ... Optional
配列に追加する要素です。要素を指定しなかった場合、 splice() は単に配列から要素を取り除きます。

返値

取り除かれた要素を含む配列です。要素が 1 つのみ削除された場合は、要素数 1 の配列が返されます。要素が削除されなかった場合、空の配列が返されます。

解説

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

仕様書

仕様書 状態 備考
ECMAScript Latest Draft (ECMA-262)
Array.prototype.splice の定義
ドラフト
ECMAScript 2015 (6th Edition, ECMA-262)
Array.prototype.splice の定義
標準
ECMAScript 5.1 (ECMA-262)
Array.prototype.splice の定義
標準
ECMAScript 3rd Edition (ECMA-262) 標準 初回定義。 JavaScript 1.2 で実装。

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
spliceChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 5.5Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

関連情報

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