簡體   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