V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ioioioioioioi
V2EX  ›  问与答

VueJS 中,如何复制 Object?比如 Object2=Object1, 当修改 Object2 的值后, Object1 的值保持不变。

  •  
  •   ioioioioioioi · 2017-05-13 15:29:50 +08:00 · 4367 次点击
    这是一个创建于 2753 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2017-05-13 16:35:53 +08:00

    感谢各位,还是json好用

    function copyObject(obj) {
        return JSON.parse(JSON.stringify(obj));
    }
    
    第 2 条附言  ·  2017-05-14 12:25:16 +08:00
    有人说 JSON 效率差,不过目前 Object 不大,感觉不到延迟,可以先这样用了。当明显感觉效率低了,再把 copyObject 改了就行。
    第 3 条附言  ·  2017-05-15 14:29:47 +08:00
    JSON 那个方法要求 IE11 以上,所以该用了_.cloneDeep 了。lodash 是个好 lib,建议大家都加到项目中
    13 条回复    2017-05-13 19:09:42 +08:00
    gzlock
        1
    gzlock  
       2017-05-13 15:34:40 +08:00 via Android   ❤️ 1
    两种办法
    json.parse(json.stringify({}))
    Object.assign({},原 object)
    gongpeione
        2
    gongpeione  
       2017-05-13 15:39:57 +08:00   ❤️ 1
    var obj2 = Object.create(obj1);
    这样也可以,虽然不算是复制了
    murmur
        3
    murmur  
       2017-05-13 15:50:04 +08:00   ❤️ 1
    Object.assign 貌似是浅拷,npm 上有递归深拷的包,当然没有 function 的时候最好的就是先 stringify 再 parse
    crysislinux
        4
    crysislinux  
       2017-05-13 15:54:58 +08:00 via Android
    修改的时候就全用 assign,slice 之类的不改变原 object 的方式
    ioioioioioioi
        5
    ioioioioioioi  
    OP
       2017-05-13 16:07:08 +08:00
    @gzlock
    @gongpeione
    @murmur
    @crysislinux Object 含有子 Object,怎么处理?
    Sivan
        6
    Sivan  
       2017-05-13 16:09:20 +08:00
    gzlock
        7
    gzlock  
       2017-05-13 16:24:22 +08:00
    @murmur #3
    @ioioioioioioi #5 assign 是有点问题

    那就用 JSON 两件套或者其它 npm 包来实现咯
    SourceMan
        8
    SourceMan  
       2017-05-13 18:10:43 +08:00 via iPhone
    json 性能有点差
    crysislinux
        9
    crysislinux  
       2017-05-13 18:11:32 +08:00 via Android
    @ioioioioioioi 有专门的包解决这个问题。大概是叫 immutability-helper 吧,最早是 react 的包,独立出来了
    ruanyu1
        10
    ruanyu1  
       2017-05-13 18:15:41 +08:00
    o2 = {...o1}
    seki
        11
    seki  
       2017-05-13 18:17:00 +08:00
    如果是单纯数据的话序列化和反序列化也足够了,lodash 也有 clone 方法
    vue 中的 immutability 的重要性倒不是这么高
    huihuimoe
        12
    huihuimoe  
       2017-05-13 18:24:08 +08:00 via Android
    wangjie
        13
    wangjie  
       2017-05-13 19:09:42 +08:00
    lodash +1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:29 · PVG 12:29 · LAX 20:29 · JFK 23:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.