简体   繁体   English

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

[英]javascript get object in nested child array

I am struggling with getting an object in a nested array from firebase using angularfire. 我正在努力使用angularfire从firebase获取嵌套数组中的对象。

The structure looks like this: 结构如下:

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

}

I have a service that fetches items from firebase based on users: 我有一项服务,可根据用户从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];
                    }
               }
            }
        }
    }


    };
});

now in my service I am able to get events as well as a single event. 现在,在我的服务中,我既可以获取事件,也可以获取单个事件。 but I cannot seem to be able to get a single task. 但我似乎无法完成一项任务。 only list the tasks. 只列出任务。 in getInnerTask I am using nested for loops in the hope that I can get the id in a similar way to getting the event ids but it is not working. 在getInnerTask中,我使用嵌套的for循环,希望我可以以与获取事件ID相似的方式获取ID,但它不起作用。

here is my controller for the single event: 这是单个事件的我的控制器:

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


});

Its worth noting that my events output looks like this: 值得注意的是,我的事件输出如下所示:

Events console output 事件控制台输出

and my tasks out put looks different (Lacks the $id field in output): 和我的任务看起来不同(在输出中缺少$ id字段):

Tasks console output 任务控制台输出

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

My guess is event is not in the current scope, may be you are not able to access it... how about using var keyword with event 我的猜测是event不在当前范围内,可能是您无法访问它...将var关键字与event一起使用怎么样

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

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