Javascript angularjs使用array.push向2个下拉列表添加选项时引用了相同的对象
我有很多这样的人:Javascript angularjs使用array.push向2个下拉列表添加选项时引用了相同的对象,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有很多这样的人: [ {'name': 'Bob', 'age': 25, 'addresses': [ { 'city': 'San Franscisco', 'state': 'CA','streetline': 'One Drive', 'selected': true }, { 'city':
[
{'name': 'Bob', 'age': 25,
'addresses': [
{
'city': 'San Franscisco', 'state': 'CA','streetline': 'One Drive',
'selected': true
},
{
'city': 'San Jose', 'state': 'CA', 'streetline': 'Two Drive',
'selected': false}
]
]
},
{'name': 'Rob', 'age': 29,
'addresses': [
{
'city': 'Baltimore', 'state': 'MD', 'streetline': 'Three Drive',
'selected': false
},
{
'city': 'Detroit', 'state': 'MI', 'streetline': 'Four Drive',
'selected': true}
}
]
}
]
其中一个外部应用程序可以通过将新地址推送到每个persons对象,为每个person添加新的公共地址
这些地址用于填充每个人的下拉列表。添加新地址后,它在每个地址数组中的显示方式不同。当在下拉列表中为任何一个人选择新地址时,该地址的所选标志将设置为true,而对于所有其他旅行者,该标志将设置为false
问题是,如果我为一个旅行者选择了不同的地址,而为另一个旅行者选择了新地址,那么第一个旅行者中的新地址将引用第二个旅行者中的新地址。因此,所选标志不是它应该是的。调试时,traveler 2显示为{'selected':true},traveler 1显示为$ref[1][address],它引用traveler 2的选定地址
我不知道为什么会这样
travellers[0].addresses.push(angular.copy(newAddress));
travellers[1].addresses.push(angular.copy(newAddress));
任何帮助都将不胜感激 我假设问题发生在您将新选项推给旅行者的时候。如果您这样做:
travellers[0].addresses.push(newAddress);
travellers[1].addresses.push(newAddress);
两者共享对同一地址的引用,您描述的问题可能会发生。您可以使用angulars复制方法来防止这种情况发生
travellers[0].addresses.push(angular.copy(newAddress));
travellers[1].addresses.push(angular.copy(newAddress));
angular.copy创建其参数的深度副本,以便两个旅行者地址都包含自己的新地址副本
有关更多信息,请参阅:相关部分是出现问题的代码,但不在此处……谢谢@Nikolas。工作起来很有魅力。