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

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

  •  
  •   coderabbit · 50 天前 · 1015 次点击
    这是一个创建于 50 天前的主题,其中的信息可能已经有所发展或是发生改变。
      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
        1
    huihuimoe   50 天前 via iPhone
    lodash deep clone
        2
    Sanko   50 天前 via Android
    序列化再反序列化
        3
    deepdark   50 天前 via Android
    深克隆
        4
    hackyuan   50 天前   ♥ 2
    ```js
    const newData = data.map(i => {
    return {
    ...i,
    status: 123
    }
    });
    // 仅支持浅层,多层需要 deep clone
    ```
        5
    chuxiaonan   50 天前
    data.slice().forEach/for...of
    data.map/flatMap
    很多方法感觉
        6
    chuxiaonan   50 天前
    @chuxiaonan 哎呀不对 slice()不行。。
        7
    zhujinliang   50 天前 via iPhone
    用 console.log(JSON.stringify(data))
        8
    neptuno   50 天前 via iPhone
    转成 json,再转回来,,,
        9
    jatai   50 天前 via Android
    ...展开运算符,真香
        10
    w292614191   50 天前
    JSON.parse
    JSON.stringify
    只能用于一些简单的对象克隆。
        11
    duzhihao   50 天前
    只能深拷贝吧,
        12
    rick2c   50 天前
    既然不想修改(污染),为什么要操作引用数据
        13
    coderabbit   50 天前
    @hackyuan 谢谢
    @rick2c 肯定要对原数据操作组装新数据。
    @chuxiaonan flatMap 我刚查了下 是 es10 的特性啊。我还停留在 es6 之前!不知道现在 bable 是否能转 es10
        14
    chuxiaonan   49 天前
    @coderabbit babel 能 transpile 的相当多 甚至很多没进入规范的都能转 比如装饰器,Observable 之类的
        15
    SoloCompany   49 天前
    data.map(x -> ({...x, status: 123}))
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2957 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 10:56 · PVG 18:56 · LAX 02:56 · JFK 05:56
    ♥ Do have faith in what you're doing.