banner
SlhwSR

SlhwSR

热爱技术的一名全栈开发者
github
bilibili

除了再帰の他に、ディープコピーを実現するための他の方法はありますか?

除了再帰的な方法、深いコピーを実現するために反復を使用することもできます。具体的には、オブジェクトを処理する必要がある場合、スタックを使用してオブジェクトを保存し、ループ内でスタックからオブジェクトを取り出してコピー操作を繰り返し行います。スタックが空になるまで続けます。

以下は、反復を使用して深いコピーを実現するためのサンプルコードです。


function deepClone(obj) {
  let stack = [obj];
  let copy = {};

  while (stack.length) {
    let cur = stack.pop();

    for (let key in cur) {
      if (cur.hasOwnProperty(key)) {
        let value = cur[key];
        if (typeof value === 'object') {
          // 配列の処理
          if (Array.isArray(value)) {
            copy[key] = [];
            for (let i = 0; i < value.length; i++) {
              copy[key][i] = value[i];
              if (typeof value[i] === 'object') {
                stack.push(value[i]);
              }
            }
          }
          // オブジェクトの処理
          else {
            copy[key] = {};
            for (let k in value) {
              copy[key][k] = value[k];
              if (typeof value[k] === 'object') {
                stack.push(value[k]);
              }
            }
          }
        } else {
          copy[key] = value;
        }
      }
    }
  }

  return copy;
}

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。