【问题标题】:javascript get object in nested child arrayjavascript获取嵌套子数组中的对象
【发布时间】:2016-07-23 22:42:41
【问题描述】:

我正在努力使用 angularfire 从 firebase 获取嵌套数组中的对象。

结构如下:

users {
  <user1-key>{
    events{
      <event-key>{
        title: "event 1",
        tasks: {
          <task-key>{
            title: "task 1",
            isChecked: false
          },
          <task-key>{
            title: "task 2",
            isChecked: false
          }
        }
      }
    }
  },


  <user 2-key>{
    events{
      <event-key>{
        title: "event 1",
        tasks: {
          <task-key>{
            title: "task 1",
            isChecked: false
          },
          <task-key>{
            title: "task 2",
            isChecked: false
          }
        }
      }
    }
  }

}

我有一项服务可以根据用户从 firebase 获取项目:

app.factory("Events", function ($firebaseObject, $firebaseArray, baseUrl) {
    ref = new Firebase(baseUrl);
    refAuth = ref.getAuth();
    events = $firebaseArray(ref.child("users/" + refAuth.uid + "/events"));

    return {
        all: function() {
          return events;
        },   

        get: function (eventId) {
            for (var i = 0; i < events.length; i++) {
                if (events[i].$id === eventId) {
                    return events[i];
                }
            }
        },

        getTasks: function(eventId){
           for (var i = 0; i < events.length; i++) {
                if (events[i].$id === eventId) {
                   return events[i].tasks;
                }
            }
        },

        getInnerTask: function(eventId, taskId){
       for (var i = 0; i < events.length; i++) {
            if (events[i].$id === eventId) {
               event = events[i];
               for(var j = 0; j < event.tasks.length; j++){
                    if(event.tasks[j].$id === taskId){
                        return event.tasks[j];
                    }
               }
            }
        }
    }


    };
});

现在在我的服务中,我可以获得事件以及单个事件。但我似乎无法完成一项任务。只列出任务。在 getInnerTask 中,我使用嵌套的 for 循环,希望能够以与获取事件 id 类似的方式获取 id,但它不起作用。

这是我的单一事件控制器:

app.controller("EventsInnerCtrl", function ($scope, $firebaseArray,$firebaseObject, $stateParams, Events) {

    $scope.event = Events.get($stateParams.eventId);

    $scope.tasks = Events.getTasks($stateParams.eventId);
    console.log($scope.tasks);

    $scope.clickTask = function(){
        $scope.task = Events.getInnerTask($stateParams.taskId);
        console.log($scope.task); // this returns "Undefined"
    }


});

值得注意的是,我的事件输出如下所示:

Events console output

我的任务输出看起来不同(输出中缺少 $id 字段):

Tasks console output

【问题讨论】:

    标签: javascript angularjs json firebase firebase-realtime-database


    【解决方案1】:
    getInnerTask: function(eventId, taskId) {
        for (var i = 0; i < events.length; i++) {
            if (events[i].$id === eventId) {
                event = events[i];
                for (var j = 0; j < event.tasks.length; j++) {
                    if (event.tasks[j].$id === taskId) {
                        return event.tasks[j];
                    }
                }
            }
        }
    }
    

    我的猜测是 event 不在当前范围内,可能是您无法访问它...如何将 var 关键字与 event 一起使用

    【讨论】:

    • 我已经尝试了所有我能想到的变化,但仍然没有运气
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多