关于javascript:多层数据对象深拷贝的问题

31次阅读

共计 1863 个字符,预计需要花费 5 分钟才能阅读完成。

贴代码,为什么我本人写的这个递归最初扭转原数据的值,被拷贝的数据也会扭转(没变成深拷贝)

    const deepCopy = (instance) => {const result = Array.isArray(instance) ? [] : instance instanceof Object ? {} : null
      if (result === null) {throw new Error(` 须要传入 Array 或 Object 类型的参数,但当初是 ${typeof instance} 类型的参数 `)
      }
      if (Array.isArray(instance)) {for (let i = 0; i < instance.length; i++) {const inst = instance[i]
          result[i] = inst
          if (inst instanceof Object) {deepCopy(inst)
          }
        }
      } else if (instance instanceof Object) {for (const key in instance) {result[key] = instance[key]
          if (Array.isArray(instance[key]) || instance[key] instanceof Object) {deepCopy(instance[key])
          }
        }
      }
      return result
    }

    const o = JSON.parse('{"hnzhghActivity":{"activityType":"4","activityTitle":" 测试 ","startTime":"2022-09-01 00:00:00","endTime":"2022-10-25 00:00:00","imgId":"282203357600632832","imgPath":"https://le/2022/09/02/bae50aff-28a3-487a-b99c-1fec2c7ad761.png","createUser":"258054318004981760","unionId":"248601951852867584","unionName":" 河南省总工会 ","createUserName":"lvyuhui"},"answerRule":" 阿瓦达瓦办法 ","answerNum":5,"answerTime":30,"answerFrequency":1,"correctNumber":1,"hnzhghActivityAnswerAwardList":[{"awardType":"2","awardName":" 谢谢参加 ","awardImg":"htile/picture/else.png"},{"awardType":"1","awardName":"23","awardTotal":"23","awardImg":"https://ghile/2022/09/02/1af9e8ae-447e-4ddf-a3b9-6b2839c3209f.png","awardImgId":"282203439435698176","awardProbability":"23","deliveryType":"1"},{"awardType":"1","awardName":"23","awardTotal":"232","awardImg":"https://gile/2022/09/02/49be25a5-e2a1-4a74-a3c8-497f9d327a30.png","awardImgId":"282203467839524864","awardProbability":"3","deliveryType":"2","address":" 发回给你跟儿童边呢人 "}],"hnzhghActivityAnswerTopicList":[{"topicId":"275063568107655168","topicName":"《工会法》比赛题库 0813"},{"topicId":"273491974549753856","topicName":"809 题库测试 845"},{"topicId":"271339739891978240","topicName":" 测试专用题库 "}],"topicName":"《工会法》比赛题库 0813,809 题库测试 845,测试专用题库 "}')
    console.log(o);
    console.log(deepCopy(o));

能够尝试扭转递归后返回的数据,能扭转原数据

正文完
 0