javascript - 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));
为了正确复制对象。
解决方案
推荐阅读
- javascript - 当变量达到特定值时向所有客户端发出
- html - Rails在body标签内渲染导航栏
- javascript - React Native 在模态中更改虚拟数据的状态
- r - 用 optim() 求方程的最大值
- reactjs - 如何保持 React Native 动画变换状态?
- python - 如何在命令后使不和谐机器人存储/查找消息的其余部分?
- mysql - 试图让 ocelotgui 调试工作
- python - Python django django-crontab 只运行一次。我如何测试它每分钟运行一次?
- python - 麻省理工学院 6.0001 pset1 部分 C
- flex-lexer - 没有预期的 Lex 输出