无法在数组Javascript中更改对象值

时间:2018-04-13 15:17:18

标签: javascript arrays object global-variables

我在JS中有这样一个类:

function configurationToken(){


this.setData= function(data){
    this.data=data;
};

this.configurationState=[];

this.analyse= function(){

#first loop to get an array called this.configurationState


#second loop to update this.configurationState 
#and put each updated state in array called trail.
for(var i=0;...;..){ 
this.configurationState[i].parameterValue = some number related to i 
this.PSTrail.push(this.configurationState);
}

#results in the final array
console.log(this.PSTrail);
}

}

问题是this.PSTrail数组中的对象都是SAME,这意味着在第二个循环中,代码被推送" this.configurationState"没有改变parameterValue,任何人都知道为什么?谢谢!

1 个答案:

答案 0 :(得分:0)

this.PSTrail.push(this.configurationState);正在推送对象的引用,因此console.log将一遍又一遍地显示同一对象的数组。如果您希望PSTrail为每个条目包含不同的对象,则需要为每个推送创建一个副本。我建议使用扩展语法:this.PSTrail.push({...this.configurationState});

如果您不熟悉该技术,那么它正在推送一个新对象({}),其中包含与this.configurationState相同的所有内容(...this.configurationState )。



ref = []
copy = []
obj = {}
for(var i=0;i<4;i++){ 
	obj[i] = i;
	ref.push(obj)
    copy.push({...obj})
}

console.log('ref result:',ref)
console.log('copy result:',copy)
&#13;
&#13;
&#13;