2016-03-31 9 views
-2

Ich habe derzeit ein großes Array mit 120 Objekten. Jeder hat einen ID-Wert und einen entgegengesetzten_ID-Wert, um grundsätzlich zwei Objekte zu paaren. Was ist der beste Weg, um jedes der Objekte zu durchlaufen, und entweder jedes Paar in ein neues Array zu legen oder die beiden als Paar darzustellen?Objekte in Array durch paarweise Werte in Angular/Javascript trennen?

Als Beispiel:

Obj1 = { 
     id: 1, 
     opposite_id: 2, 
     descr: "This is the first object" 
    }, 
    Obj2 = { 
     id: 2, 
     opposite_id: 1, 
     descr: "This is the second object" 
    }, 
    Obj3 = { 
     id: 3, 
     opposite_id: 6, 
     descr: "This is the third object" 
    } 

ich schließlich Obj1 und Obj2 müssten zusammen angezeigt werden (im Idealfall mit ng-Wiederholung) als Paar unter Vermeidung Obj2 und Obj1 Anzeige (da es sich um eine Wiederholung sein würde) ... Ich habe Probleme, meinen Kopf darum zu wickeln, wie man diese bestimmte Aktion macht, jede Hilfe wäre sehr willkommen! Danke

+0

Was ist mit 'Obj1',' Obj2', etc? Sind sie wörtliche Variablen? Ich dachte, das sollte in einem Array sein. Entsprechen die Array-Indizes überhaupt den Eigenschaften des Objekts id? – Phil

+1

Das sieht unglaublich künstlich aus. Warum postest du nicht deine wirkliche Code- und Datenstruktur, die ein echtes Problem darstellt, und wir können dir viel besser helfen. –

+0

Fest, danke! Und Phil, nein der Index entspricht nicht dem Objekt user.id Eigenschaft, da der Gegner grundsätzlich jede Woche randomisiert wird. – Alonso

Antwort

0

Hier ist eine Möglichkeit, wie Sie sie paaren könnten.

var app = angular.module("app", []); 
 

 
app.controller("controller", function($scope) { 
 
    var users = [{ 
 
    "id": 11, 
 
    "user": { 
 
     "id": 5, 
 
     "first_name": "", 
 
     "last_name": "" 
 
    }, 
 
    "opponent": 2 
 
    }, { 
 
    "id": 12, 
 
    "user": { 
 
     "id": 6, 
 
     "first_name": "", 
 
     "last_name": "" 
 
    }, 
 
    "opponent": 3 
 
    }, { 
 
    "id": 13, 
 
    "user": { 
 
     "id": 2, 
 
     "first_name": "", 
 
     "last_name": "" 
 
    }, 
 
    "opponent": 5 
 
    }, { 
 
    "id": 14, 
 
    "user": { 
 
     "id": 3, 
 
     "first_name": "", 
 
     "last_name": "" 
 
    }, 
 
    "opponent": 6 
 
    }]; 
 

 
    $scope.pairs = []; 
 
    var alreadyPaired = []; // ids of users that have already been paired 
 

 
    for (var i = 0; i < users.length; i++) { 
 
    var user = users[i]; 
 
    
 
    // if this user hasn't already been paired 
 
    if (alreadyPaired.indexOf(user.user.id) === -1) { 
 
     var opponent = null; 
 

 
     for (var j = 0; j < users.length; j++) { 
 
     if (users[j].user.id === user.opponent) { 
 
      opponent = users[j]; 
 
     } 
 
     } 
 

 
     $scope.pairs.push({ 
 
     user1: user, 
 
     user2: opponent 
 
     }); 
 

 
     alreadyPaired.push(user.user.id); 
 
     alreadyPaired.push(opponent.user.id); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="controller"> 
 
    <h3>Pairs</h3> 
 
    <table> 
 
    <thead> 
 
     <tr> 
 
     <th>User</th> 
 
     <th>Opponent</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     <tr ng-repeat="pair in pairs"> 
 
     <td>{{pair.user1.user.id}}</td> 
 
     <td>{{pair.user2.user.id}}</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</div>

Verwandte Themen