JS实现的深拷贝和浅拷贝

      发布在:前端技术      评论:0 条评论
<p>在JavaScript中,如果你希望防止原始数据在被修改后随之改变,你可以创建一个新的副本,然后在这个副本上进行修改。这可以通过各种方式实现,包括浅拷贝和深拷贝。</p><p>浅拷贝:</p><p>浅拷贝仅复制对象的顶层属性。如果对象的属性是引用类型(例如数组或另一个对象),则这些属性将被复制引用,而不是实际的数据。</p><p>function shallowCopy(obj) {</p><p>&nbsp; &nbsp; return JSON.parse(JSON.stringify(obj));</p><p>}</p><p>深拷贝:</p><p>深拷贝不仅复制对象的顶层属性,还会复制对象内部的子对象和数组。这样,原始对象和拷贝的对象的所有属性都是独立的。</p><p>function deepCopy(obj) {</p><p>&nbsp; &nbsp; let copy = Array.isArray(obj) ? [] : {};</p><p>&nbsp; &nbsp; for (let i in obj) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (obj.hasOwnProperty(i)) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (typeof obj[i] === &#39;object&#39; &amp;&amp; obj[i] !== null) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; copy[i] = deepCopy(obj[i]); // 递归拷贝对象内的对象</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; copy[i] = obj[i]; // 拷贝原始值</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; }</p><p>&nbsp; &nbsp; return copy;</p><p>}</p><p>这两种方法都可以实现数据的复制,但需要注意的是,深拷贝比浅拷贝更复杂,并且可能需要进行递归操作。另外,如果数据结构非常复杂,或者包含循环引用,那么实现深拷贝可能会更复杂。</p><p><br/></p>
相关文章
热门推荐