我正在尝试使用表单输入中的键“name”将对象推入数组。我从表单中获取信息并记录object.name& ID。它在输入中的以下条目中覆盖以前的对象值。 我如何覆盖所有对象值? 谢谢!
let inputValues = [];
let newTodoInput = {};
let idNumber = 0;
function bindEvents() {
$('form').on('submit', function() {
event.preventDefault();
newTodoInput.name = $('.new-todo').val(); // obj
newTodoInput.id = idNumber++;
inputValues.push(newTodoInput);
$('form').trigger("reset"); // clear form
});
}
数组中的第一个条目
0:Object
id:1
name:"1st entry"
数组的第二个条目
0:Object
id:1
name:"2nd entry"
1:Object
id:1
name:"2nd entry"
答案 0 :(得分:1)
您需要在事件处理程序中定义let 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
});