这实际上可能是一个JavaScript问题,但是当我使用AngularJs时会发生这种情况。
说我有这样的数组:
var teams = [
{
id: 1,
name: 'Team 1',
members: players
},
{
id: 2,
name: 'Team 2',
members: players
}
];
然后我有另一个这样的数组:
teams[0].members[0].position = 1;
如果我决定将一个名为position的新属性添加到其中一个团队:
foo
我不希望它更新第二个团队成员的位置。 我希望这是有道理的。
这是一个用于说明我的问题的代码:
答案 0 :(得分:4)
java脚本中的数组是可变的,因此您需要复制播放器并将其分配给团队成员属性。
只需将您的代码更改为:
var teams = [
{
id: 1,
name: 'Team 1',
members: angular.copy(players)
},
{
id: 2,
name: 'Team 2',
members: angular.copy(players)
}
];
有关详细信息,请参阅:https://docs.angularjs.org/api/ng/function/angular.copy
答案 1 :(得分:2)
唯一的方法(如果两队都有相同的球员)是为第二支球队使用阵列的副本。现在,第二个团队得到更新是合乎逻辑的,因为两个团队都指向players
的相同引用。
您可以使用angular.copy。
var copyofplayers = [];
angular.copy(players, copyofplayers);
答案 2 :(得分:0)
也可以像
一样使用jQuery.extend()var teams = [
{
id: 1,
name: 'Team 1',
members: jQuery.extend({}, players)
},
{
id: 2,
name: 'Team 2',
members: jQuery.extend({}, players)
}
];