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 = [];

我最近在Javascript/Angular上遇到了一个问题,我还没有找到解决方案

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},]
 }