数组的值在更新属性值时更新

时间:2019-02-28 12:44:21

标签: javascript jquery

我在JS文件中有以下代码

    var listOfCountries = [];
    var Country = {};
    Country = { "CountryCode": null, "SerialNo": 0, "FrzInd": false }

    for (var i=0; i < $('#ulCustomCountryList li').length; i++) {
      Country.CountryCode = $("#countryCode_" + i).val();
      Country.SerialNo = $("#serialNo_" + i).val();
      listOfCountries.push(Country);
    }

在第一次迭代中:当countryCode_0为“ IND”时为listOfCountries[0].CountryCode = "IND",在第二次迭代中,当countryCode_1为“ AUS”时为listOfCountries[1].CountryCode = "AUS",但它还将listOfCountries [0] .CountryCode的值更新为{ {1}}

1 个答案:

答案 0 :(得分:1)

因为对象是引用。对对象的所有引用将被更新。 您每次迭代都推送相同的对象,因此有两种方法可以修复它

1-每次迭代都创建一个新对象 如下:

  var countriesCount = $('#ulCustomCountryList li').length; //- 1
  listOfCountries =[];
  for (var i = 0; i < countriesCount; i++) {

    var Country = { "CountryCode": null, "SerialNo": 0, "FrzInd": false }
    Country.CountryCode = $("#countryCode_" + i).val();
    Country.SerialNo = $("#serialNo_" + i).val();
    listOfCountries.push(Country);

  }

或 2-每次迭代都使用Object.assign({},Country)复制对象。

     var countriesCount = $('#ulCustomCountryList li').length; //- 1
       var listOfCountries = [];
        var Country = {};
        Country = { "CountryCode": null, "SerialNo": 0, "FrzInd": false }

        for (var i=0; i < countriesCount; i++) {
          var copy = Object.assign({}, Country);
          copy.CountryCode = $("#countryCode_" + i).val();
          copy.SerialNo = $("#serialNo_" + i).val();
          listOfCountries.push(copy);
        }