配列.splice()
| 対応: | ES3(ECMAScript 1999) |
|---|
配列の任意の位置に対して、要素の追加・削除・置換を行うメソッドです。元の配列を直接変更します。
構文
// 指定位置から要素を削除します。 var removed = 配列.splice(開始位置, 削除する数); // 指定位置に要素を追加します。削除する数を0にします。 配列.splice(開始位置, 0, 追加する要素1, 追加する要素2, ...); // 指定位置の要素を置換します。 配列.splice(開始位置, 削除する数, 置換する要素1, 置換する要素2, ...);
引数
| 引数 | 概要 |
|---|---|
| 開始位置 | 操作を開始するインデックスを指定します。負の値を指定すると末尾から数えた位置になります。 |
| 削除する数 | 削除する要素の数を指定します。『0』を指定すると要素を削除せず、追加のみ行います。省略すると開始位置以降のすべての要素が削除されます。 |
| 追加する要素 | 省略可能です。削除した位置に挿入する要素を指定します。複数の要素をカンマ区切りで指定できます。 |
サンプルコード
sample_splice.js
// パターン1: 要素の削除
var members = ["桐生一馬", "真島吾朗", "秋山駿", "錦山彰", "冴島大河"];
// インデックス1から2つの要素を削除します。
var removed = members.splice(1, 2);
console.log(removed); // 『真島吾朗,秋山駿』と出力されます。
console.log(members); // 『桐生一馬,錦山彰,冴島大河』と出力されます。
// パターン2: 要素の挿入
// インデックス1の位置に要素を追加します。削除はしません。
members.splice(1, 0, "真島吾朗", "秋山駿");
console.log(members); // 『桐生一馬,真島吾朗,秋山駿,錦山彰,冴島大河』と出力されます。
// パターン3: 要素の置換
// インデックス2の要素を置換します。
members.splice(2, 1, "桐生一馬");
console.log(members); // 『桐生一馬,真島吾朗,桐生一馬,錦山彰,冴島大河』と出力されます(秋山駿が桐生一馬に置換)。
// パターン4: 負の値で末尾から位置を指定する
var roster = ["桐生一馬", "真島吾朗", "秋山駿", "錦山彰", "冴島大河"];
// 末尾から2番目の要素(錦山彰)を削除します。
var popped = roster.splice(-2, 1);
console.log(popped); // 『錦山彰』と出力されます。
console.log(roster); // 『桐生一馬,真島吾朗,秋山駿,冴島大河』と出力されます。
// パターン5: 実践的なユースケース(特定要素を別の要素で置き換える)
var enemies = ["栗田", "嶋野", "桐生一馬", "近江連合"];
// 「桐生一馬」のインデックスを探して削除し、別の値に置き換えます。
var idx = enemies.indexOf("桐生一馬");
if (idx !== -1) {
enemies.splice(idx, 1, "錦山彰");
}
console.log(enemies); // 『栗田,嶋野,錦山彰,近江連合』と出力されます。
[ '真島吾朗', '秋山駿' ] [ '桐生一馬', '錦山彰', '冴島大河' ] [ '桐生一馬', '真島吾朗', '秋山駿', '錦山彰', '冴島大河' ] [ '桐生一馬', '真島吾朗', '桐生一馬', '錦山彰', '冴島大河' ] [ '錦山彰' ] [ '桐生一馬', '真島吾朗', '秋山駿', '冴島大河' ] [ '栗田', '嶋野', '錦山彰', '近江連合' ]
概要
『配列.splice()』は配列の任意の位置に対して、削除・追加・置換を一度に行える万能なメソッドです。元の配列を直接変更する破壊的メソッドであり、戻り値は削除された要素の配列です。要素を削除しなかった場合は空の配列が返されます。
開始位置に負の値を指定すると、末尾からの位置として扱われます。例えば『-1』は最後の要素、『-2』は最後から2番目の要素を指します。第2引数を省略した場合は開始位置以降のすべての要素が削除されるため、配列の末尾をまとめて切り取りたいときに便利です。
元の配列を変更せずに一部を取り出したい場合は『配列.slice()』を使用してください。名前が似ていますが、『配列.splice()』は元の配列を変更し、『配列.slice()』は元の配列を変更しないという重要な違いがあります。
対応ブラウザ
デスクトップ
4.5 以前 ×
3 以前 ×モバイル
Android Browser
37 以降 ○
4 以前 ×
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。