0

我的火力DATABSE如下:是否有可能迭代兩個數組來匹配值?

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

數據庫節點通過下面的代碼帶入範圍:

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

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

是否存在通過搜索兩個數組的方式來itereate或環匹配值?具體來說,是否有一種方法可以通過「players」數組來循環搜索id與「selection」數組中的數字相匹配的球員。

最終目標是讓每個客戶的選擇在選擇完成後反映在頁面上。

我DATABSE安全規則如下:

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

我試圖遍歷每個選擇如下:

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

但這並沒有工作

+0

@NinaScholz對不起你能詳細談談那一點?我不太確定這是什麼意思? –

+0

對不起,這只是想。 –

回答

0

你可以使用一個對象與id作爲單人的關鍵。

通過迭代users,您可以通過將id添加到玩家信息中來添加所需的信息。

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

對不起,我不知道firebase。 –

0

您可以查詢使用equalTo每個選定的ID,記住你有指標Player.id在火力安全規則。

然後簡單:

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

你可以找到更多的火力文檔:here

+0

謝謝,但我不太清楚如何在安全規則中爲Player.id編制索引。文章相當混亂。對不起,如果這是一個愚蠢的問題,但我可能會看到如何做到這一點? –

+0

在此處查看:[indexing-data](https://firebase.google.com/docs/database/security/indexing-data) – Khaled

+0

謝謝。是的,我讀過,很困惑。我編輯了我的問題,以反映我現在的規則。這是正確的語法嗎? –

相關問題