配列.slice() / concat()
| 対応: | ES3(ECMAScript 1999) |
|---|
配列の一部を取り出したり、複数の配列を結合して新しい配列を作成するメソッドです。どちらも元の配列を変更しません。
構文
// 配列の一部を取り出して新しい配列を作成します。 var newArray = 配列.slice(開始位置, 終了位置); // 複数の配列や値を結合して新しい配列を作成します。 var newArray = 配列.concat(配列2, 配列3, ...);
メソッド一覧
| メソッド | 概要 |
|---|---|
| slice(開始, 終了) | 指定した範囲の要素を取り出して新しい配列を返します。終了位置の要素は含まれません。引数を省略すると配列全体のコピーを返します。 |
| concat(値1, 値2, ...) | 元の配列に指定した配列や値を結合した新しい配列を返します。引数には配列と値のどちらも指定できます。 |
サンプルコード
sample_slice.js
// パターン1: 基本的な範囲指定と負の値 var members = ["孫悟空", "ベジータ", "ブルマ", "クリリン", "ピッコロ"]; // インデックス1から3の手前まで取り出します。 var sliced = members.slice(1, 3); console.log(sliced); // 『ベジータ,ブルマ』と出力されます。 console.log(members); // 『孫悟空,ベジータ,ブルマ,クリリン,ピッコロ』と出力されます。元の配列は変わりません。 // 負の値で末尾から数えます。 var last2 = members.slice(-2); console.log(last2); // 『クリリン,ピッコロ』と出力されます。 // 引数なしで配列をコピーします(シャローコピー)。 var copy = members.slice(); console.log(copy); // 『孫悟空,ベジータ,ブルマ,クリリン,ピッコロ』と出力されます。 // パターン2: concat で配列を結合する var z = ["孫悟空", "ベジータ"]; var androids = ["人造人間17号", "人造人間18号"]; var merged = z.concat(androids, ["ピッコロ"]); console.log(merged); // 『孫悟空,ベジータ,人造人間17号,人造人間18号,ピッコロ』と出力されます。 console.log(z); // 『孫悟空,ベジータ』と出力されます。元の配列は変わりません。 // パターン3: 実践的なユースケース(配列をページごとに分割するページネーション) var fighters = ["孫悟空", "ベジータ", "ブルマ", "クリリン", "ピッコロ", "天津飯", "ヤムチャ", "チャオズ"]; var pageSize = 3; var page1 = fighters.slice(0, pageSize); var page2 = fighters.slice(pageSize, pageSize * 2); console.log(page1); // 『孫悟空,ベジータ,ブルマ』と出力されます。 console.log(page2); // 『クリリン,ピッコロ,天津飯』と出力されます。 // パターン4: splice の前に slice でバックアップを作る(破壊的操作の前の安全策) var originals = ["孫悟空", "ベジータ", "ブルマ", "クリリン"]; var backup = originals.slice(); // コピーを保存します。 originals.splice(1, 2); // 元配列を変更します。 console.log(originals); // 『孫悟空,クリリン』と出力されます。 console.log(backup); // 『孫悟空,ベジータ,ブルマ,クリリン』と出力されます。バックアップは無事です。
[ 'ベジータ', 'ブルマ' ] [ '孫悟空', 'ベジータ', 'ブルマ', 'クリリン', 'ピッコロ' ] [ 'クリリン', 'ピッコロ' ] [ '孫悟空', 'ベジータ', 'ブルマ', 'クリリン', 'ピッコロ' ] [ '孫悟空', 'ベジータ', '人造人間17号', '人造人間18号', 'ピッコロ' ] [ '孫悟空', 'ベジータ' ] [ '孫悟空', 'ベジータ', 'ブルマ' ] [ 'クリリン', 'ピッコロ', '天津飯' ] [ '孫悟空', 'クリリン' ] [ '孫悟空', 'ベジータ', 'ブルマ', 'クリリン' ]
概要
『配列.slice()』と『配列.concat()』はどちらも元の配列を変更せず、新しい配列を返す非破壊的メソッドです。配列を安全に操作したい場合に便利です。
『配列.slice()』は第1引数で開始位置、第2引数で終了位置を指定します。終了位置の要素は含まれない点に注意してください。引数に負の値を指定すると末尾から数えた位置になり、『slice(-2)』は最後の2つの要素を取り出します。引数を省略すると配列のシャローコピー(浅いコピー)が作成されるため、元の配列に影響を与えずに操作したい場合のコピー手段としても使われます。
名前が似ている『配列.splice()』は元の配列を直接変更する破壊的メソッドです。取り出すだけなら『配列.slice()』、追加・削除・置換をしたいなら『配列.splice()』と使い分けてください。
対応ブラウザ
デスクトップ
3 以前 ×
3 以前 ×モバイル
Android Browser
37 以降 ○
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。