.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


