是否可以迭代两个数组以匹配值?

时间:2017-09-05 09:41:09

标签: javascript angularjs arrays web-applications firebase-realtime-database

我的firebase数据库如下:

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);

有没有办法在搜索匹配值时迭代或循环遍历两个数组?具体来说,有没有办法循环“玩家”阵列,以搜索id匹配“选择”数组中的数字的玩家。

最终目标是在选择完成后,让每个客户的选择反映在页面上。

我的数据库安全规则如下:

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

但这不起作用

2 个答案:

答案 0 :(得分:0)

您可以使用id的对象作为单个玩家的键。

通过迭代users,您可以通过id添加所需信息来访问播放器信息。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用equalTo查询每个选定的ID,请记住,您必须在firebase安全规则中为Player.id编制索引。

然后简单地说:

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

您可以在firebase文档中找到更多内容:here