Array.prototype.splice()

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

試してみましょう

構文

splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2, itemN)

引数

start

配列を変更する先頭の位置です。

配列の長さより大きい場合、start は配列の長さに設定されます。 この場合、削除される要素はありませんが、このメソッドは追加関数として動作し、提供された項目の数だけ要素を追加します。

値が負の数の場合は、配列の末尾から要素数だけ戻ったところから始まります。 (-1 が原点で、-n は最後の要素から n 番目であることを意味し、したがって位置が array.length - n であるのと同等です)。 start-Infinity であった場合は、 0 の位置から始まります。

deleteCount 省略可

配列の start の位置から取り除く古い要素の個数を示す整数です。

deleteCount 引数が省略された場合、または array.length - start 以上 (つまり、start から始めて配列に残っている要素の数以上) の場合、start 以降のすべての要素が取り除かれます。ただし、 item1 引数が存在する場合は省略できません。

deleteCount0 または負の数の場合、どの要素も取り除かれません。この場合、少なくとも 1 つの新しい要素を指定する必要があります (以下参照)。

item1, …, itemN 省略可

配列に追加する要素で、start から始まります。

要素を指定しなかった場合、splice() は単に配列から要素を取り除きます。

返値

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

要素が 1 つだけ取り除かれた場合は、要素数 1 の配列が返されます。

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

解説

取り除こうとする要素数と異なる数の要素を挿入するように指定した場合、配列の length は変更されます。

2 の位置の手前から 0 個の要素を削除して "drum" を挿入

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

// myFish は ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed は [] であり、どの要素も取り除かれていない

2 の位置の手前から 0 個の要素を削除して、"drum" と "guitar" を挿入

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

// myFish は ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed は [] であり、どの要素も取り除かれていない

3 の位置から 1 つ取り除く

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

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

2 の位置から 1 つ取り除いて "trumpet" を挿入

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

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

0 の位置から 2 つ取り除き、そこへ "parrot" と "anemore" と "blue" を挿入

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

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

2 の位置から 2 つ取り除く

const myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
const removed = myFish.splice(2, 2);

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

-2 の位置から 1 つ取り除く

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

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

2 の位置からすべての要素を取り除く

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

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

仕様書

Specification
ECMAScript Language Specification
# sec-array.prototype.splice

ブラウザーの互換性

BCD tables only load in the browser

関連情報

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