Alter and Assign Object Without Side Effects

前端 未结 7 1395
盖世英雄少女心
盖世英雄少女心 2020-11-28 14:27

I currently have the following code:

var myArray = [];
var myElement = {
  id: 0,
  value: 0
}

myElement.id = 0;
myElement.value = 1;
myArray[0] = myElement         


        
7条回答
  •  孤街浪徒
    2020-11-28 14:47

    That's because object values are passed by reference. You can clone the object like this:

    var myArray = [];
    var myElement = {
      id: 0,
      value: 0
    }
    
    myElement.id =0;
    myElement.value=1;
    myArray[0] = myElement;
    
    var obj = {};
    obj = clone(myElement);
    obj.id = 2;
    obj.value = 3; 
    
    myArray[1] = obj;
    
    function clone(obj){
      if(obj == null || typeof(obj) != 'object')
        return obj;
    
      var temp = new obj.constructor(); 
      for(var key in obj)
        temp[key] = clone(obj[key]);
    
      return temp;
    }    
    
    console.log(myArray[0]);
    console.log(myArray[1]);
    

    Result:

     - id: 0
     - value: 1
     - id: 2
     - value: 3
    

提交回复
热议问题