如何将值从一个变量绑定到其他变量

问题描述

我有2个变量x % nmasterdatadatatoedit具有数组值,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()可以产生深度复制的效果,因此在所有情况下都可以正常工作。 (尽管这些功能并非旨在进行深层复制。)