天天看點

#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十六題-簡易深拷貝

 前言

我是歌謠 我有個兄弟 巅峰的時候排名c站總榜19 叫前端小歌謠 曾經我花了三年的時間創作了他 現在我要用五年的時間超越他 今天又是接近兄弟的一天人生難免坎坷 大不了從頭再來 歌謠的意志是永恒的 放棄很容易 但是堅持一定很酷 本題目源自于牛客網 微信公衆号前端小歌謠

題目

請補全JavaScript代碼,要求實作對象參數的深拷貝并傳回拷貝之後的新對象。

注意:

1. 參數對象和參數對象的每個資料項的資料類型範圍僅在數組、普通對象({})、基本資料類型中]

2. 無需考慮循環引用問題

#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十六題-簡易深拷貝
#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十六題-簡易深拷貝

​編輯

 核心代碼

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>簡易深拷貝</title>
</head>

<body>
  <!-- 根據題目要求,實作對象參數的深拷貝并傳回拷貝之後的新對象,因為參數對象和參數對象的每個資料項的資料類型範圍僅在數組、
    普通對象({})、基本資料類型中且無需考慮循環引用問題,是以不需要做過多的資料類型判斷,核心步驟有:
    如果對象參數的資料類型不為“object”或為“null”,則直接傳回該參數
    根據該參數的資料類型是否為數組建立新對象
    周遊該對象參數,将每一項遞歸調用該函數本身的傳回值賦給新對象
 -->
  <script type="text/javascript">
    const _sampleDeepClone = target => {
      if (typeof target === 'object' && target !== null) {
        const cloneTarget = Array.isArray(target) ? [] : {}
        for (prop in target) {
          if (target.hasOwnProperty(prop)) {
            cloneTarget[prop] = _sampleDeepClone(target[prop])
          }
        }
        return cloneTarget
      } else {
        return target
      }
    }
  </script>
</body>

</html>      

繼續閱讀