Javascript 如何更改阵列的克隆而不更改reactjs中的原始阵列
我的组件中有一个状态,当单击“保存”按钮并更改和删除克隆的某些属性,然后发布到后端时,我希望克隆此状态,但当我更改克隆阵列时,原始状态也会更改;我不知道该怎么办,我追踪了克隆阵列的所有方法,但它们都没有帮助我; 以下是我的密码: . . . 常量[步骤,设置步骤]=使用状态[ { id:1, //内容:第1项内容, 分项:[ { id:10, isNew:错, 哈斯:是的, 标题:“第10项内容”, 批准人类型:1, 批准者ID:0, }, { id:11, isNew:错, 哈斯:是的, 标题:“第11项内容”, 批准类型:2, 批准人ID:1, } ] }, { id:2, //内容:第2项内容, 分项:[ { 身份证号码:20, isNew:错, hasWorkflow:错误, 标题:“第20项内容”, 批准类型:2, 批准人编号:4, }, { id:21, isNew:错, hasWorkflow:错误, 标题:“第21项内容”, 批准人类型:1, 批准人编号:3, } ] } , { id:3, 内容:第3项内容, 分项:[ { 身份证号码:55, isNew:错, hasWorkflow:错误, 标题:“第20项内容”, 批准类型:2, 批准人编号:6, }, { 身份证号码:66, isNew:错, hasWorkflow:错误, 标题:“第21项内容”, 批准类型:2, 批准人编号:4, } ] } ]; . . . . 函数handleSaveWorkflow{ //const_result=steps.0; 让_result=[…步]; _result.mapitem,索引=>{ item.subItems.mapi,ind=>{ 删除i.hassworkflow; 如果是新的{ i、 id=null; } 删除i.isNew; 返回i; }; 退货项目; }; 常量_final={steps:[…_result]}; console.log'result::',_final; console.log'steps::',steps; //警报(最后);; workflowAxios.post`/workflow templates/${props.id}/workflow template steps`、、\u final .thenresponse=>{ console.log'response e:',response; //设置步骤响应; } .catcherror=>{ console.log'error:',error; }; } 要获得深度复制,请尝试此选项Javascript 如何更改阵列的克隆而不更改reactjs中的原始阵列,javascript,reactjs,ecmascript-6,jsx,Javascript,Reactjs,Ecmascript 6,Jsx,我的组件中有一个状态,当单击“保存”按钮并更改和删除克隆的某些属性,然后发布到后端时,我希望克隆此状态,但当我更改克隆阵列时,原始状态也会更改;我不知道该怎么办,我追踪了克隆阵列的所有方法,但它们都没有帮助我; 以下是我的密码: . . . 常量[步骤,设置步骤]=使用状态[ { id:1, //内容:第1项内容, 分项:[ { id:10, isNew:错, 哈斯:是的, 标题:“第10项内容”, 批准人类型:1, 批准者ID:0, }, { id:11, isNew:错, 哈斯:是的, 标题
let _result = JSON.parse(JSON.stringify(steps));
或
spread语法不提供深度副本
深度复制
深度复制意味着实际创建一个新数组并在值上进行复制,因为对它发生的任何事情都不会影响原始数组
要获得更多的澄清和更好的理解,您可以参考了解深度复制,请尝试以下内容
let _result = JSON.parse(JSON.stringify(steps));
或
spread语法不提供深度副本
深度复制
深度复制意味着实际创建一个新数组并在值上进行复制,因为对它发生的任何事情都不会影响原始数组
为了获得更多的澄清和更好的理解,您可以参考解析和取消解析可能会对性能造成相当大的影响,这取决于具体情况,一种方便的替代方法是,如果您在项目中使用“Lodash”,您只需像这样使用:
这将返回一个新数组,保留原始数组不变。解析和取消解析可能会对性能造成相当大的影响,这取决于具体情况,一种方便的替代方法是,如果在项目中使用“Lodash”,您可以像这样使用:
这将返回一个新数组,保留原始数组不变。感谢您的帮助我尝试了您的第一个解决方案它成功了非常感谢。感谢您的帮助我尝试了您的第一个解决方案它成功了非常感谢。
const newArr = _.cloneDeep( steps );