.slice(0)で配列をコピーするコードの例です
slice(0)で0番目の要素から最後の要素までを取り出す方法で書いています
以下の2つでも同じです
- array.slice()
- array.slice(0, array.length)
コード.gs
function get_copy(){ var array = [1, 2, 3, 4, 5]; var copy_array = array.slice(0); array[0] = 0; Logger.log([array, copy_array]); } |
意訳この機能がやること 配列を用意して arrayの0番目から最後まで取り出して(つまりarrayと同じ配列になる) 確認のためarrayの順番をちょっと変えて(先頭の要素に0を入れる) ログに出す |
実行結果
array, copy_arrayの順でログに出る
arrayは
先頭の要素を0にした配列
[0.0, 2.0, 3.0, 4.0, 5.0]
copy_arrayは
先頭の要素を変更する前の配列
[1.0, 2.0, 3.0, 4.0, 5.0]
補足
この方法でコピーされるのは1階層だけのようです(=シャローコピー)
2階層(2次元配列とか)以上の要素の値を変更すると、コピー元共々変更される
どういうことかやってみる
1次元配列でやってみると
コード.gsfunction one_dimention(){ var array = ["HARE"]; var array_slice = array.slice(); array_slice.push("AME"); array.push("YUKI"); Logger.log(array); Logger.log(array_slice); } | 意訳この機能がやること 配列を用意して sliceでコピーして 要素を追加する コピー元の配列にも要素を追加する コピー元の配列をログに出す コピーした配列をログに出す |
実行結果
2次元配列でやってみると
コード.gsfunction two_dimentions(){ var array = [["HARE"]]; var array_slice = array.slice(); array_slice.push("AME"); array_slice[0].push("KUMORI"); array.push("YUKI"); array[0].push("MIZORE"); Logger.log(array); Logger.log(array_slice); } | 意訳この機能がやること 2次元配列を用意して sliceでコピーして 配列に要素を追加する 配列の0番目の要素に要素を追加する コピー元の配列に要素を追加する コピー元の配列の0番目の要素に要素を追加する コピー元の配列をログに出す コピーした配列をログに出す |
実行結果
参考
Array.prototype.slice()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
Array.prototype.slice()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/slice