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。工作起来很有魅力。