JavaScript における配列コピーの問題
JavaScript における配列( array )はオブジェクトのため参照コピーされる。
つまり、コピー先の配列を変更すると、コピー元の配列が変更されてしまうといった事象が発生する。
例えば次のようになる。
array = [1,2,3];
arrayCopy = array;
arrayCopy[0] = 4;
console.log(arrayCopy); // [4,2,3]
console.log(array); // [4,2,3] : コピー元の値も変更される
JavaScript における配列コピーの解決策
2020年11月現在ではいくつかの方法があるので代表的なものを紹介する。
slice()
速度が早い、と言われている。
array = [1,2,3];
arrayCopy = array.slice();
concat()
slice() 同様、速度が早い、と言われている。
array = [1,2,3];
arrayCopy = array.concat();
スプレッド構文( ES2015 )
最も直感的な記述だと思われる。
array = [1,2,3];
arrayCopy = [...array];
その他
for() や while() 、map() 、filter() 、reduce()、from() による方法あり。
参考
- How to clone an array in JavaScript | freeCodeCamp
- Fastest way to duplicate an array in JavaScript - slice vs. 'for' loop | Stack Overflow