美文网首页
对象的拷贝

对象的拷贝

作者: 一枚靠脸吃饭的程序员 | 来源:发表于2017-09-08 13:53 被阅读0次

layout: post
title: 对象(数组)的拷贝
date: 2017-08-31 16:10:17
tags: 学习


老生常谈

都是很老的问题了,为啥还要写,网上搜索一大堆。其实是有个小故事的,第一次面试的时候,面试官就给我出了一个拷贝的题,奈何我当时还是小白。。。什么都不懂,现在过了接近一年,刚好看到相关的东西,就顺道总结一下。

what is clone

对象拷贝(也叫复制),得到一个与已知对象看起来"相同的对象",但是本质上不是一个对象,也不是同一个引用。如果只复制一层,就叫浅复制,对象经常是多层,多层的就是深复制。

浅拷贝(shallow clone)

第一时间想到的就是遍历

const shallowClone = (current) => {
    let obj = {}
    for(let i in current){
        if(src.hasOwnProperty(i)){   // 只遍历本身的属性
            obj[i] = current[i]
        } 
    }
    return obj
}
let cur = {a:1,b:2}
console.log(shallowClone(cur))

深拷贝(deep clone)

网上大牛写的挺多的,序列化啥的。不考虑特殊情况,递归遍历应该是基本可以满足要求的,但是仅仅是基础实现,涉及到原型链上的方法之类的,暂时不作讨论。

let cur = {a:1,b:{c:2,d:{e:3}},c:function(){return 1+2 }}

const deepClone = (current) => {
    let obj = {}
    for(let i in current){
        if(current.hasOwnProperty(i)){
            obj[i] = typeof(current[i]) === 'object' ? deepClone(current[i]) : current[i]
        }
    }
    return obj
}

console.log(deepClone(cur))

还有大家公认的方法啦,弊端就是没有方法,null,undefined这些了。
Json的方法

let obj = {a:1,b:{c:2,d:{e:3}},c:function(){return 1+2 }}
let target = Json.parse(Json.stringfy(obj))
target //  {a:1,b:{c:2,d:{e:3}}} copy不了里面的方法

数组的clone

比较简单的就是split(0) 和 concat() 了,这2个方法都是没有side effects。
其他遍历的方法应该也是ok的,但是深clone可能会比较烦啦 ~~~~

相关文章

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • Java-序列化—(三)序列化实现深拷贝

    浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象...

  • Objective-C中的深拷贝与浅拷贝

    一、概念 浅拷贝——只拷贝指向对象的指针,不拷贝引用对象本身。 深拷贝——拷贝引用对象本身。将对象obj,拷贝后得...

  • iOS - copy与mutableCopy

    浅拷贝与深拷贝 浅拷贝:指针拷贝,不产生新的对象,源对象的引用计数器+1 深拷贝:对象拷贝,会产生新的对象,源对象...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • 引用赋值和浅拷贝和深拷贝

    1.对象的引用赋值 2.对象的浅拷贝 浅拷贝:是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象...

  • 深拷贝和浅拷贝不同

    浅拷贝:指针(地址)拷贝,不会产生新对象深拷贝:内容拷贝,会产生新对象 非容器类对象的深拷贝、浅拷贝 非容器类对象...

  • 深浅copy

    概念:浅拷贝:不拷贝对象,只拷贝对象指针,因此不会产生新的对象。深拷贝:拷贝对象到新的内存,因此会产生新的对象。 ...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 copy.deepcopy 深拷贝 拷贝对...

网友评论

      本文标题:对象的拷贝

      本文链接:https://www.haomeiwen.com/subject/csigjxtx.html