JQuery将对象推入数组会覆盖所有数组对象

JQuery将对象推入数组会覆盖所有数组对象,jquery,arrays,object,ecmascript-6,Jquery,Arrays,Object,Ecmascript 6,我试图使用表单输入中的键“name”将对象推入数组。我从表单fine中获取信息,并将object.name&id记录在以下条目上,这些条目来自覆盖以前对象值的输入。 我如何覆盖这里的所有对象值? 谢谢 数组中的第一项 0:Object id:1 name:"1st entry" 数组的第二项 0:Object id:1 name:"2nd entry" 1:Object id:1 name:"2nd entry" 您需要在事件处理程序中定义让newTodoInput={}。问题是您正在创建

我试图使用表单输入中的键“name”将对象推入数组。我从表单fine中获取信息,并将object.name&id记录在以下条目上,这些条目来自覆盖以前对象值的输入。 我如何覆盖这里的所有对象值? 谢谢

数组中的第一项

0:Object
id:1
name:"1st entry"
数组的第二项

0:Object
id:1
name:"2nd entry"

1:Object
id:1
name:"2nd entry"

您需要在事件处理程序中定义
让newTodoInput={}
。问题是您正在创建对对象的单个引用,更新它,并将对该对象的引用推送到数组中。让我非常清楚--您不是在推送该对象的实例,而是在数组上推送对该对象的引用。因此,下次触发时,您将更新name和id属性,这将更新原始对象,该对象将由引用该对象的每个数组元素反映出来

$('form').on('submit', function() {
  event.preventDefault();
  var newTodoInput = {}; // <-- This is the key to this working properly
  newTodoInput.name = $('.new-todo').val(); // obj
  newTodoInput.id = idNumber++;
  inputValues.push(newTodoInput);

  $('form').trigger("reset"); // clear form
});
$('form')。在('submit',函数()上{
event.preventDefault();

var newTodoInput={};//您不是在创建新对象,您只是不断更改同一对象并将同一对象插入数组。
inputValues[0]===inputValues[1]
让newTodoInput={};
在事件处理程序之外是不必要的,它应该在内部。此外,
idNumber
可以替换为
inputValues.length+1
感谢您对推送实例/引用的说明。我现在理解了我的问题。谢谢&@KevinB@JackZ不客气!很高兴这有助于澄清你的问题
$('form').on('submit', function() {
  event.preventDefault();
  var newTodoInput = {}; // <-- This is the key to this working properly
  newTodoInput.name = $('.new-todo').val(); // obj
  newTodoInput.id = idNumber++;
  inputValues.push(newTodoInput);

  $('form').trigger("reset"); // clear form
});