将$ firebaseArray中的项目与对象进行比较并删除匹配的项目

时间:2017-04-13 04:48:34

标签: angularjs firebase firebase-realtime-database angularfire

我觉得自己如此接近,但我无法理解这一点。

我在Firebase中有一个包含事件的数据树,每个事件下都有一个参与者列表及其用户ID和名称。

-events
    -UniqueID
        -participants
            -userID
                facebook_id: "12345678"
                display_name: "John Doe"
            -userID
                facebook_id: "12345678"
                display_name: "John Doe"
            -userID
                facebook_id: "12345678"
                display_name: "John Doe"

在我的路线中,我有一个解析功能,可以为安装了我的应用的用户查询Facebook API,并将friends对象传递给控制器​​。

这是用户邀请朋友参加活动的页面。我想检查参与者数组并从friends对象中删除已经在事件中的用户。

我遍历$firebaseArray并使用lodash查找相应的ID。 Lodash的_.find返回对象(如果找到)或undefined如果找不到。

我在这里的另一个答案中找到了这个removeItemsById函数,但它似乎不起作用。

_.find正常工作,因为我看到它记录匹配的项目,但它不会从对象中删除。有什么想法吗?

    $scope.participants = $firebaseArray(firebase.database().ref().child("events").child($stateParams.eventID).child("participants"));    

    $scope.participants.$loaded().then(function(){

        console.log(friends);

          angular.forEach($scope.participants, function(part){

            var i = _.toString(part.facebook_id);
            console.log(part.facebook_id);
            var f = _.find(friends, {'id': i});

            console.log("f value is: " + f);

            if (f) {
                console.log("Found matching facebook id: " + part.facebook_id);
                removeItemsById(friends, part.facebook_id);
            }

          })  

          $scope.friends = friends;

    })



    function removeItemsById(arr, id) {
        var i = arr.length;
        if (i) {   // (not 0)
            while (--i) {
                var cur = arr[i];
                if (cur.id == id) {
                    arr.splice(i, 1);
                }
            }
        }
    }

0 个答案:

没有答案