Javascript 在更新属性值时更新数组的值
我在JS文件中有以下代码Javascript 在更新属性值时更新数组的值,javascript,jquery,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_"
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);
}
var-listOfCountries=[];
var Country={};
Country={“CountryCode”:null,“SerialNo”:0,“FrzInd”:false}
对于(var i=0;i<$('ulCustomCountryList li')。长度;i++){
Country.CountryCode=$(“#CountryCode_”+i).val();
Country.SerialNo=$(“#SerialNo"+i).val();
国家列表。推动(国家);
}
在第一次迭代中:当countryCode\u 0为“IND”时,则
国家列表[0]。countryCode=“IND”
,在第二次迭代中,当countryCode\u 1为“AUS”时,则国家列表[1]。countryCode=“AUS”
但它也会更新国家列表[0]的值。countryCode为国家列表[0]。countryCode=“AUS”
因为对象是参考。将更新对对象的所有引用。
每次迭代都推送相同的对象,因此有两种方法来修复它
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);
}
在每次迭代中创建一个新对象。此时,您总是更新相同的
Country
object.putvar Country={};Country={“CountryCode”:null,“SerialNo”:0,“FrzInd”:false}
循环中的这两行,以便它可以在每次迭代中获取新对象。这与您在另一个代码中的循环中获取空对象不同。:)
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);
}