首页 > 解决方案 > Javascript:重新分配的变量正在变异

问题描述

知道为什么我的变量赋值会发生突变吗?这看起来很简单,但我只是不确定发生了什么。

下面,一个数据对象pullChecklist作为道具传递给函数。我想获取这些数据,创建一个副本(newPage),更改该副本中的 id,然后将副本保存为 state。

但是,每当我尝试更改副本newPage中的 ID 时,ID 也会更改为page. 3 个控制台日志证实了这一点。

如果我一起删除 if 语句并只留下Original Assignment控制台Original Assignment 2日志,则数据与作为道具发送时完全相同。添加 if 语句会将所有控制台日志更改为具有更新 ID 的版本。

const pullChecklist = (page) => {
    console.log('Original Assignment', page.components[0].blocks)
    let newPage = page
    if (newPage.components[0].blocks) {

      newPage.components[0].blocks.map((block) => {
        if (block.type === 'checklist') {
        
          let newTest = uuidv4()
          block.id = newTest

          for (const c in block.data) {
            let newId = uuidv4()
            block.data[c].id = newId
          }
          console.log('Reformatted', block);
        }
      });
    }
    console.log('Original Assignment 2', page.components[0].blocks);

  };

为什么数据page会被变异?谢谢!

编辑:

正如下面@Vlaz 所指出的,let newPage = page不复制对象。

我使用:obj = JSON.parse(JSON.stringify(o));为了正确复制对象。

标签: javascriptreactjs

解决方案


推荐阅读