Javascript/Angular正在修改我的常量变量,尽管我没有要求他这么做
我最近在Javascript/Angular上遇到了一个问题,我还没有找到解决方案Javascript/Angular正在修改我的常量变量,尽管我没有要求他这么做,javascript,angularjs,arrays,function,Javascript,Angularjs,Arrays,Function,我最近在Javascript/Angular上遇到了一个问题,我还没有找到解决方案 var listPlayers = $rootScope.Party.players; $rootScope.Party.order = $scope.randomTeam(listPlayers); 这是一个函数,将随机玩家的顺序 $scope.randomTeam = function(players){ var team = players; var order = [];
var listPlayers = $rootScope.Party.players;
$rootScope.Party.order = $scope.randomTeam(listPlayers);
这是一个函数,将随机玩家的顺序
$scope.randomTeam = function(players){
var team = players;
var order = [];
var index = team.length;
l = team.length;
for (var i = 0; i < l; i++) {
var alea = randomNumber(0,index-1);
order.push(team[alea]);
team.splice(alea,1);
index--;
}
return order;
}
最后:
$rootScope.Party = {
players: [],
order: [{name:'Peter', id:1},
{name:'Peter', id:2},
{name:'John', id:3},]
}
我的“玩家”名单变空了,我不知道为什么
即使我没有修改$rootScope.Party.players,函数也会设法清空表,而$rootScope.Party.players在函数末尾是空的。
这真的激怒了我,因为我把它放在了另一个变量中,并把这个变量作为函数的参数。你的问题出在
var team=players代码>
更改团队变量将更改玩家,因为默认情况下javascript会维护旧的引用
尝试使用var team=players.slice()代码>
这将创建新的球员副本,改变球队不会影响球员
希望能有帮助 ofc。是的。你们指定一个团队指向你们的球员,然后将其拼接成一个环。数组是通过引用而不是通过值传递给方法的。好吧,我不知道数组是通过引用传递的,我一直认为它只是一个值,就像一个新对象一样。谢谢是的,它成功了,谢谢你,兄弟!!我每天都在学习变量管理!谢谢:)
$rootScope.Party = {
players: [],
order: [{name:'Peter', id:1},
{name:'Peter', id:2},
{name:'John', id:3},]
}