0

Mon firebase databse est la suivante:est-il possible de parcourir deux tableaux pour les valeurs correspondantes?

Users { 
    askdfasdf: John: { 
      Selection: [1,2,3] 
        }, 
    fasfadffe: Mark: { 
    Selection: [1,2,4] 
        } 
    } 

Players { 
{ 
name: 'Messi', 
agility: 90, 
id: 1 
}, 
{ 
name: 'Beckham', 
agility: 54, 
id: 2 
}, 
{ 
name: 'Rooney', 
agility: 10, 
id: 3 
}, 
{ 
name: 'Neymar', 
agility: 84, 
id: 4 
} 
} 

Les noeuds de base de données sont introduits dans le champ d'application par le code suivant:

var ref = firebase.database().ref("players"); 
    var ref3 = firebase.database().ref("users").child(uid).child("total"); 

    $scope.players = $firebaseArray(ref); 
    $scope.selection = $firebaseArray(ref3); 

est-il un moyen de itereate ou d'une boucle à travers deux tableaux à la recherche de des valeurs correspondantes? Plus précisément, existe-t-il un moyen de parcourir le tableau "players" à la recherche des joueurs dont les id correspondent aux numéros du tableau "selection".

Le but ultime est que les sélections de chaque client soient reflétées sur la page après leur sélection.

Mes règles de sécurité Databse sont les suivantes:

{ 
"rules": { 
"players":{ 
    ".read" : "auth != null", 
    ".write" : "auth != null", 
    ".indexOn": "id" 
    } 
    } 
} 

J'ai essayé itérer sur chaque sélection comme suit:

$scope.getSelectedPlayers = function(){ 
for (let i = 0; i<$scope.selection.length; i++){ 
    return $scope.selection[i]; 

var ref= 
    firebase.database().ref("players").orderByChild("id").equalTo($scope.selection[i]); 
} 

mais cela ne fonctionne pas

+0

@NinaScholz désolé pourriez-vous donner des détails à ce sujet? Je ne suis pas tout à fait sûr de ce que cela signifie? –

+0

désolé, c'était juste pensé. –

Répondre

0

Vous pouvez utiliser un objet avec id comme clés pour les joueurs individuels. Avec itération users, vous pouvez ajouter l'information voulue en prenant le id pour un accès aux informations du lecteur.

var players = [{ name: 'Messi', agility: 90, id: 1 }, { name: 'Beckham', agility: 54, id: 2 }, { name: 'Rooney', agility: 10, id: 3 }, { name: 'Neymar', agility: 84, id: 4 }], 
 
    object = Object.create(null); 
 

 
players.forEach(p => object[p.id] = p); 
 

 
console.log(object);

+0

Désolé, je n'ai aucune idée de Firebase. –

0

Vous pouvez interroger chaque ID sélectionné à l'aide equalTo, gardez à l'esprit que vous avez à l'index Player.id dans les règles de sécurité Firebase.

Ensuite, il suffit:

firebase.database().ref("players").orderByChild("id").equalTo('selected_id_here'); 

Vous pouvez trouver plus Firebase docs: here

+0

merci mais je ne sais pas trop comment indexer Player.id dans les règles de sécurité. L'article était assez confus. Désolé si c'est une question idiote mais pourrais-je voir comment cela peut-il être fait? –

+0

Vérifiez ici: [indexing-data] (https://firebase.google.com/docs/database/security/indexing-data) – Khaled

+0

merci. Oui, j'ai lu ça et j'étais assez confus. J'ai édité ma question pour refléter ce que mes règles sont maintenant. Est-ce la syntaxe correcte? –