我有以下代码:
var ship_array = new Array();
var ship_object = new Object();
ship_object.builder_id = 0;
ship_object.list_id = 0;
ship_object.ship_id = 0;
ship_object.title_id = 0;
然后在保存功能中,我这样做:
function saveAll() {
// Array cleaning
while (ship_array.length) { ship_array.pop(); }
// Cyclic save function
$.each($(".ship-block"), function () {
ship_object.builder_id = parseInt($(this).attr("data-counter"));
ship_object.list_id = list.id;
ship_object.ship_id = parseInt($(this).attr("data-ship-id"));
ship_array.push(ship_object);
});
console.log(ship_array);
}
在用 Chrome 调试时,每个 ship_object 在每个循环中都有正确的值,但是当我打印数组时,每个对象都有相同的值,这些值都对应于最后插入的值。字面上不知道为什么会这样。想法?
最佳答案
基本上,您正在使用对象的引用并一次又一次地更新同一个对象。每次循环迭代时尝试创建一个新对象,
function saveAll() {
//while (ship_array.length) { ship_array.pop(); }
ship_array = [];
$(".ship-block").each(function () {
ship_object = {}; // creating a new object here!!
ship_object.builder_id = parseInt($(this).attr("data-counter"));
ship_object.list_id = list.id;
ship_object.ship_id = parseInt($(this).attr("data-ship-id"));
ship_array.push(ship_object);
});
console.log(ship_array);
}