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