2017-05-03 1 views
0
frage

Ich habe ein neues Problem auf Javascript/Angular und ich habe noch keine Lösung gefunden.Javascript/Angular ändert meine konstante Variable auch wenn ich ihn nicht nach

var listPlayers = $rootScope.Party.players; 
$rootScope.Party.order = $scope.randomTeam(listPlayers);  

Dies ist eine Funktion, wird die Reihenfolge der Spieler zufällig

$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; 
} 

Spielerliste sieht wie folgt aus:

$rootScope.Party = { 
    players: [ 
     {name:'John', id:1}, 
     {name:'Peter', id:2}, 
     {name:'Daniel', id:3}, 

    ], 
    order: [], 
} 

Am Ende:

$rootScope.Party = { 
    players: [], 
    order: [{name:'Peter', id:1}, 
     {name:'Peter', id:2}, 
     {name:'John', id:3},] 
} 

Meine "Spieler" -Liste wurde leer und ich weiß nicht ow warum

UND sogar dachte ich nicht meine $ rootScope.Party.players ändern, die Funktion verwalten, um die Tabelle zu leeren und $ rootScope.Party.players ist leer am Ende der Funktion. Das erregt mich wirklich, weil ich es in eine andere Variable lege und diese Variable als Parameter für die Funktion verwende. Standard hält alte Referenzen

+0

ofc. Sie machen. Sie weisen einem Team zu, dass es auf Ihre Spieler zeigt und spleißt es dann in einer Schleife. Das Array wird nach Referenz und nicht nach Wert an eine Methode übergeben. –

+0

Okay, ich wusste nicht, Arrays werden mit Verweis übergeben, ich dachte immer, es war nur der Wert wie ein neues Objekt. Vielen Dank! –

Antwort

0

Ihr Problem ist bei var team = players;

Ändern Team Variable wird von den Spielern als Javascript ändern.

Versuchen var team = players.slice();

mit Es wäre die neue Kopie der Spieler zu erstellen und zu ändern Team nicht Spieler beeinflussen.

Hoffe es hilft !!

+0

Yeeeeees es hat funktioniert, danke du bro !! Ich lerne Variablen-Management jeden Tag –

+0

Bitte akzeptieren Sie es als Antwort könnte es anderen helfen :) –

+0

Erledigt! Vielen Dank :) –

Verwandte Themen