我在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,任何人都知道为什么?谢谢!
答案 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;