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

js 循环如何不污染原来的对象啊!

  •  
  •   coderabbit · 2019-09-28 23:07:12 +08:00 · 2029 次点击
    这是一个创建于 1864 天前的主题,其中的信息可能已经有所发展或是发生改变。
      let data =[{},{}]
      console.log(data);
      data.forEach(function (item) {
    	item.status = 123;
      });
    

    结果打印 data 的时候 里面多了个 key status 把源数据污染掉了。我不想它污染源数据,有什么办法处理呢! 还有 V2 回贴的时候 markdown 为啥没用呢!该如何回呢!

    15 条回复    2019-09-29 21:29:24 +08:00
    huihuimoe
        1
    huihuimoe  
       2019-09-28 23:10:12 +08:00 via iPhone
    lodash deep clone
    Sanko
        2
    Sanko  
       2019-09-28 23:12:22 +08:00 via Android
    序列化再反序列化
    deepdark
        3
    deepdark  
       2019-09-28 23:19:49 +08:00 via Android
    深克隆
    hackyuan
        4
    hackyuan  
       2019-09-28 23:30:22 +08:00   ❤️ 2
    ```js
    const newData = data.map(i => {
    return {
    ...i,
    status: 123
    }
    });
    // 仅支持浅层,多层需要 deep clone
    ```
    chuxiaonan
        5
    chuxiaonan  
       2019-09-28 23:34:05 +08:00
    data.slice().forEach/for...of
    data.map/flatMap
    很多方法感觉
    chuxiaonan
        6
    chuxiaonan  
       2019-09-28 23:35:20 +08:00
    @chuxiaonan 哎呀不对 slice()不行。。
    zhujinliang
        7
    zhujinliang  
       2019-09-29 00:11:54 +08:00 via iPhone
    用 console.log(JSON.stringify(data))
    neptuno
        8
    neptuno  
       2019-09-29 07:39:18 +08:00 via iPhone
    转成 json,再转回来,,,
    jatai
        9
    jatai  
       2019-09-29 08:33:01 +08:00 via Android
    ...展开运算符,真香
    w292614191
        10
    w292614191  
       2019-09-29 08:43:40 +08:00
    JSON.parse
    JSON.stringify
    只能用于一些简单的对象克隆。
    duzhihao
        11
    duzhihao  
       2019-09-29 11:37:35 +08:00
    只能深拷贝吧,
    rick2c
        12
    rick2c  
       2019-09-29 12:17:31 +08:00
    既然不想修改(污染),为什么要操作引用数据
    coderabbit
        13
    coderabbit  
    OP
       2019-09-29 15:09:58 +08:00
    @hackyuan 谢谢
    @rick2c 肯定要对原数据操作组装新数据。
    @chuxiaonan flatMap 我刚查了下 是 es10 的特性啊。我还停留在 es6 之前!不知道现在 bable 是否能转 es10
    chuxiaonan
        14
    chuxiaonan  
       2019-09-29 20:53:48 +08:00
    @coderabbit babel 能 transpile 的相当多 甚至很多没进入规范的都能转 比如装饰器,Observable 之类的
    SoloCompany
        15
    SoloCompany  
       2019-09-29 21:29:24 +08:00
    data.map(x -> ({...x, status: 123}))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.