我有以下代码:

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

10-07 18:58
查看更多