JavaScriptメモ: 配列をコピーする

配列コピー用の 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);
}