2016-03-31 12 views
-2

Şu anda 120 nesneli büyük bir dizim var. Temel olarak iki nesneyi eşleştirmek için her birinin bir id değeri ve bir zıt_id değeri vardır. Nesnelerin her birinden geçmenin en iyi yolu nedir ve her çifti yeni bir diziye koyun veya ikisini bir çift olarak mı görüntüleyeceksiniz? Bir örnek olarak Dizideki ayrı nesneleri Angular/Javascript'te eşlenmiş değerler ile ayırın?

:

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" 
    } 
sonuçta birlikte obj1 ve obj2 göstermek gerekir

görüntülendiği kaçınırken bir çift (ideal ng-tekrar) obj2 ve Obj1 (bir tekrar olur çünkü) ... Başımı bu özel eylemin nasıl yapılacağına sarmakla ilgili sorun yaşıyorum, herhangi bir yardım çok takdir edilecek! Teşekkürler

+0

vb 'Obj1',' Obj2', nesi var? Onlar değişmez değişkenler mi? Bunun bir dizide olması gerektiğini düşündüm. Dizi dizinleri, 'id' özelliklerinin tümüne karşılık geliyor mu? – Phil

+1

Bu inanılmaz derecede karmaşık görünüyor. Neden gerçek bir problem gösteren gerçek kodunuzu ve veri yapınızı yayınlamıyorsunuz ve size daha iyi bir şekilde yardımcı olacağız. –

+0

Sabit, teşekkürler! Ve Phil, indeks, temelde her hafta rakibinin rasgele hale gelmesiyle nesne user.id özelliğine uymuyor. – Alonso

cevap

0

İşte bunları bir şekilde eşleştirebilirsiniz.

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>

İlgili konular