coderabbit
V2EX  ›  问与答

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

  •  
  •   coderabbit · Sep 28, 2019 · 2908 views
    This topic created in 2601 days ago, the information mentioned may be changed or developed.
      let data =[{},{}]
      console.log(data);
      data.forEach(function (item) {
    	item.status = 123;
      });
    

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

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