将对象推送到数组只返回最后推送的对象

时间:2017-02-20 12:41:44

标签: javascript jquery arrays object

我知道很久以前问过这个问题,我已经研究了很多,但我找不到解决方案。所以,我有一个表单,我使用form.serializeArray();将表单值获取到数据数组。我使用此数组创建了一个对象obj。我需要将每个对象推送到新数组personArray。但是推送此数组中的对象只会返回最后推送的对象。我怎么解决这个问题。我需要在personArray

中存储来自表单的每个新对象

var obj = {};
var data, i;
var personArray = [];
var pageArray = [];

$("#submitButton").click(function() {
  addButton();
  // addTable();
  // pagination();
  // resetForm('');
});

/*Formdaki verileri objeye aktarır, objeyi array'a aktarır*/
function addButton() {
  data = $('#personForm').serializeArray();
  for (i = 0; i < data.length; i++) {
    obj[data[i].name] = data[i].value;
  }

  personArray.push(obj);
  console.log(personArray);
  /*Datayı array'e aktarır*/
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<form id="personForm">
  <div>
    <label for="firstname">İsim:</label>
    <input type="text" id="firstname" name="firstname" value="" placeholder="İsim" />
  </div>
  <div>
    <label for="lastname">Soyisim:</label>
    <input type="text" id="lastname" name="lastname" value="" placeholder="Soyisim" />
  </div>
  <div>
    <label for="tc">TC:</label>
    <input type="tel" id="tc" name="tc" value="" placeholder="TC Kimlik No" />
  </div>
  <div>
    <label for="birthday">Doğum T:</label>
    <input type="date" id="birthday" name="birthday" />
  </div>
  <div>
    <input type="button" value="Kaydet" id="submitButton" />
  </div>
</form>

2 个答案:

答案 0 :(得分:2)

您正在使用相同的对象,因此每次您覆盖已经推送的对象并再次重新推送它。由于object只是对内存空间的引用,因此每次都必须创建一个新对象,否则最终只能推送多次相同的对象。以下是对正在发生的事情的解释:

var arr = [];

var o = {};

o["data"] = "hello";
arr.push(o);

o["other"] = "world";
arr.push(o);

console.log(arr);

这是你应该做的:

var hash = {}; // the hash object
var data, i;
var personArray = [];
var pageArray = [];

$("#submitButton").click(function() {
  addButton();
  // addTable();
  // pagination();
  // resetForm('');
});

function addButton() {
  var obj = {}; // create a brand new object every time
  data = $('#personForm').serializeArray();
  for (i = 0; i < data.length; i++) {
    obj[data[i].name] = data[i].value;
    hash[data[i].name] = data[i].value; // assign to the hash object
  }

  personArray.push(obj);
  console.log(personArray);
}

答案 1 :(得分:0)

试试这个!

var data, i;
var personArray = [];
var pageArray = [];

$("#submitButton").click(function() {
  addButton();
  // addTable();
  // pagination();
  // resetForm('');
});

/*Formdaki verileri objeye aktarır, objeyi array'a aktarır*/
function addButton() {
   var obj = {};
  data = $('#personForm').serializeArray();
  for (i = 0; i < data.length; i++) {
    obj[data[i].name] = data[i].value;
  }

  personArray.push(obj);
  console.log(personArray);
  /*Datayı array'e aktarır*/
}