Javascript 将元素推入数组会导致修改以前的元素

Javascript 将元素推入数组会导致修改以前的元素,javascript,Javascript,我将元素推入数组,问题是每次我推入一个新元素时,前面的所有元素都会与最后一个元素相等。 我遇到了一些问题,但我仍然不知道如何解决这个问题 请看这本书。正如帖子所建议的,我将instance的声明移动到for循环中,但我仍然遇到同样的问题。也就是说,代码的输出如下所示:[46,46]。然而,我希望它是[23,46] 我真的快发疯了。有什么想法吗 $(文档).ready(函数(){ var json={'name':'Anna','counter':1} var计数器=[23,46]; var结果

我将元素推入数组,问题是每次我推入一个新元素时,前面的所有元素都会与最后一个元素相等。 我遇到了一些问题,但我仍然不知道如何解决这个问题

请看这本书。正如帖子所建议的,我将
instance
的声明移动到for循环中,但我仍然遇到同样的问题。也就是说,代码的输出如下所示:
[46,46]
。然而,我希望它是
[23,46]

我真的快发疯了。有什么想法吗

$(文档).ready(函数(){
var json={'name':'Anna','counter':1}
var计数器=[23,46];
var结果=[];
$(计数器)。每个(函数(){
var instance=json;
instance.counter=this;
结果推送(实例);
});
$(结果)。每个(函数(){
$(“#test”).append(“
  • ”+this.counter+”
  • ); }); });
    
    

    您可以在
    每个
    函数中移动对象,并为每次调用创建一个新的引用,而无需使用相同的对象引用

    $(文档).ready(函数(){
    var计数器=[23,46];
    var结果=[];
    $(计数器)。每个(函数(){
    var实例={name:'Anna',计数器:1};
    instance.counter=this;
    结果推送(实例);
    });
    $(结果)。每个(函数(){
    $(“#test”).append(“
  • ”+this.counter+”
  • ); }); });
    
    
    您应该使用
    var instance=jQuery.extend(true,{},json)进行深度复制

    $(文档).ready(函数(){
    var json={'name':'Anna','counter':1}
    var计数器=[23,46];
    var结果=[];
    $(计数器)。每个(函数(){
    var instance=jQuery.extend(true,{},json);
    instance.counter=this;
    结果推送(实例);
    });
    $(结果)。每个(函数(){
    $(“#test”).append(“
  • ”+this.counter+”
  • ); }); });
    
    

    您有相同的对象引用。