ES6の配列をどのようにディープコピーしますか?

ES6では、スプレッド構文と呼ばれる配列拡張演算子「…」を用いて配列のディープコピーを実現できます。その方法は以下の通りです。

  1. 日本では、使用している材料の正確なリストを参照できます。
  2. 元の配列の各要素がオブジェクトまたは配列の場合、再帰的に深コピー関数を呼び、その要素を深コピーして、コピー終了後、値を新しい配列の対応する位置に割り当てます。

配列のdeepcopyを作成する再帰関数のサンプルコードを次に示します。

function deepCopyArray(arr) {
  // 创建一个新的数组变量
  let newArr = [];
  
  // 遍历原始数组中的每个元素
  for (let elem of arr) {
    // 如果元素是对象或数组,则递归调用深拷贝函数进行拷贝
    if (typeof elem === 'object' && elem !== null) {
      newArr.push(deepCopyArray(elem));
    } else {
      newArr.push(elem);
    }
  }
  
  return newArr;
}

// 测试
let arr1 = [1, 2, [3, 4]];
let arr2 = deepCopyArray(arr1);
console.log(arr2); // 输出 [1, 2, [3, 4]]
console.log(arr1 === arr2); // 输出 false
console.log(arr1[2] === arr2[2]); // 输出 false

上記のコードでは、再帰関数 deepCopyArray を用いて配列のディープコピーを実現しています。この関数はまず新しい配列 newArr を作成し、その後元の配列 arr 内の各要素を走査します。各要素について、それがオブジェクトまたは配列の場合は、再帰的に deepCopyArray 関数を呼び出してディープコピーを行い、その結果を newArr に追加します。基本型の場合は、直接 newArr に追加します。

上記コードでは配列のディープコピーは実装できますが、配列に含まれる関数、正規表現などの他の型のディープコピーは実装できません。他の型の要素をディープコピーする場合は、再帰関数に判断処理およびロジックを追加する必要があります。

bannerAds