配列コピー用の copyArray 関数を作成する
const a = [1, 2, 3];
const b = a;
JavaScript では、上記のような代入は、単なるリファレンスの代入になってしまいます。 配列の内容をコピーして新しいオブジェクトを作りたい場合は、以下のように新しい配列を生成する必要があります。
function copyArray(arr) {
return Array.apply(null, arr);
}
const a = [1, 2, 3];
const b = copyArray(b);Array クラスを拡張して clone() メソッドを追加する
Array クラスの prototype を拡張して clone() メソッドのようなものを追加すれば、配列がもともとコピー機能を持っているかのように記述できるようになります。
Array.prototype.clone = () => {
return Array.apply(null, this);
}
const a = [1, 2, 3];
const b = a.clone();
多次元配列でもコピーできるようにするには、再帰的にコピーを行う必要があります。
Array.prototype.clone = function() {
if (this[0].constructor == Array) {
const len = this.length;
const arr = new Array(len);
for (let i = 0; i < len; ++i) {
arr[i] = this[i].clone();
}
return arr;
}
return Array.apply(null, this);
}