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

时间:2017-02-06 23:29:21

标签: jquery arrays object ecmascript-6

我正在尝试使用表单输入中的键“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"

1 个答案:

答案 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
});