javascript - 将元素插入数组会导致前面的元素被修改

标签 javascript

我正在将元素插入数组,问题是每次我插入一个新元素时,所有先前的元素都会等于最后一个元素。 我遇到过this post ,但我仍然不知道如何解决该问题

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

我真的要疯了。有什么想法吗???

$(document).ready(function() {
  var json = {'name': 'Anna', 'counter': 1}
  var counters = [23, 46];
  var result = [];
  $(counters).each(function() {
    
      var instance = json;
      instance.counter = this;
      result.push(instance);
  });
  
  $(result).each(function(){
      $('#test').append('<li>' + this.counter + '</li>');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id = 'test'>

</ul>

最佳答案

您应该使用 var instance = jQuery.extend(true,{},json); 进行深度复制

$(document).ready(function() {
  var json = {'name': 'Anna', 'counter': 1}
  var counters = [23, 46];
  var result = [];
  $(counters).each(function() {
    
      var instance = jQuery.extend(true,{},json);
      instance.counter = this;
      result.push(instance);
  });
  
  $(result).each(function(){
      $('#test').append('<li>' + this.counter + '</li>');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id = 'test'>

</ul>

关于javascript - 将元素插入数组会导致前面的元素被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47090648/

相关文章:

javascript - 如何在单击时切换 AccordionContainer?

javascript - 为什么单击按钮时我的黑色覆盖层没有出现?

javascript - w2ui 网格列标题工具提示或气泡头

javascript - 从 evaluateJavaScript 函数的完成处理程序返回 HTML 字符串

javascript - 如何更新或覆盖范围内的变量?

javascript - 使用 javascript 传递站点属性

javascript - 如果只允许在文本字段中显示日期,jQuery 多个日期选择器将不起作用

javascript - Ionic & Visual Studio/Cordova - Ionic 不工作

javascript - AngularJS 通过模板在组件之间进行通信(带有 promise )

javascript - 省略 mongodb 中不必要的属性