前言
我是歌謠 我有個兄弟 巅峰的時候排名c站總榜19 叫前端小歌謠 曾經我花了三年的時間創作了他 現在我要用五年的時間超越他 今天又是接近兄弟的一天人生難免坎坷 大不了從頭再來 歌謠的意志是永恒的 放棄很容易 但是堅持一定很酷 本題目源自于牛客網 微信公衆号前端小歌謠
題目
請補全JavaScript代碼,要求實作對象參數的深拷貝并傳回拷貝之後的新對象。
注意:
1. 參數對象和參數對象的每個資料項的資料類型範圍僅在數組、普通對象({})、基本資料類型中]
2. 無需考慮循環引用問題
編輯
核心代碼
<!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>