javascript - 数组的值在更新属性值时更新
问题描述
我在 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 的值更新为listOfCountries[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);
}
或 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);
}
推荐阅读
- python - conda install -n base --revision 1 不清理 pypi 包
- mysql - 通过 Shell 脚本为 auth socket 插件执行 MySQL 命令
- javascript - Antd:如何获取特定单元格点击中的整行值?
- html - 引导图像未显示在较小的屏幕上
- python - 计算两个数据集之间的汉明距离
- javascript - 淘汰赛中的自定义组件绑定
- javascript - 如何在不刷新文件的情况下更改对象?
- c++ - 如何将对象作为参数传递?
- reactjs - 使用条件时 React 类组件中的解析错误
- javascript - 向内部带有 Font Awesome 图标的按钮添加事件回调函数