繁体   English   中英

javascript在嵌套子数组中获取对象

[英]javascript get object in nested child array

我正在努力使用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"
    }


});

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

事件控制台输出

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

任务控制台输出

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一起使用怎么样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM