如何解决如何将值从一个变量绑定到其他变量
我有2个变量x % n
和masterdata
。
datatoedit
具有数组值,masterdata
具有对象值。
我想将数据1从datatoedit
复制到变量masterdata
,所以我这样写:
datatoedit
但是当我编辑this.datatoedit = this.masterdata[0]
上表单数据上的datatoedit
中的数据时,也发生了变化。
在编辑masterdata[0]
时如何防止masterdata[0]
发生变化?
解决方法
您可以使用ES6 Spread syntax来制作对象副本:
this.datatoedit = {...this.masterdata[0]}
,
您也可以使用lodash函数clonedeep进行此操作。不会复制参考。
data_to_edit = _.cloneDeep(masterdata[0])
您现在可以根据需要修改data_to_edit。
,如果masterdata
元素具有嵌套对象,如
{
name: 'John',age: 30,address: {
street: 'ChurchStreet',city: 'Bangalore',state: 'KA'
}
}
var masterdata = [
{
name: 'John',address: {
street: 'ChurchStreet',state: 'KA'
}
},{
name: 'Jane',age: 26,address: {
street: 'West of Chord',city: 'Mumbai',state: 'MH'
}
}
];
// With spread operator
var datatoedit = {...masterdata[0]};
datatoedit.age = 32;
datatoedit.address.street = 'Infantry Road';
console.log('With spread operator');
console.log('masterdata[0]: ' + JSON.stringify(masterdata[0]));
console.log('datatoedit: ' + JSON.stringify(datatoedit));
// With Object.assign()
datatoedit = Object.assign({},masterdata[0]);
datatoedit.age = 35;
datatoedit.address.street = 'Brigade Road';
console.log('With Object.assign()');
console.log('masterdata[0]: ' + JSON.stringify(masterdata[0]));
console.log('datatoedit: ' + JSON.stringify(datatoedit));
// Now with JSON.parse() and JSON.stringify()
datatoedit = JSON.parse(JSON.stringify(masterdata[0]));
datatoedit.age = 35;
datatoedit.address.street = 'West of Chord Road';
console.log('With JSON.parse() and JSON.stringify()');
console.log('masterdata[0]: ' + JSON.stringify(masterdata[0]));
console.log('datatoedit: ' + JSON.stringify(datatoedit));
如您所见,在嵌套对象的情况下,散布运算符和Object.assign()都会因为进行浅表复制而出错。
结合使用JSON.parse()和JSON stringify()可以产生深度复制的效果,因此在所有情况下都可以正常工作。 (尽管这些功能并非旨在进行深层复制。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。