3

How to iterate through nested firebase objects.

Publications-
            |
            |-Folder1------
            |             |-hdgjg76675e6r-
            |             |               |-Name
            |             |               |-Author
            |             |
            |             |+-hdgjdsf3275e6k
            |             |+-hd345454575e6f
            |+-Folder2

In publications I have folders and in folders I have objects (containing properties like. Name, Author)

I have iterated through folders till now.

snapshot.forEach(function (snapshot) {
    var key = snapshot.key();
    var obj = snapshot.val();
    console.log(key);
    //output => Folder1 , Folder2 etc
});

When I print obj

console.log(obj);

It displays

enter image description here

How do I iterate through obj variable as it contains hdgjg76675e6r , hdgjdsf3275e6k etc and further?

KENdi
  • 7,576
  • 2
  • 16
  • 31
Noman Ali
  • 3,160
  • 10
  • 43
  • 77

3 Answers3

5

You obj is just a normal javascript object, you can just use a simple for loop:

for(var key in obj) {
    console.log(obj[key]);
}

or you can use again a forEach on your snapshot:

folderSnapshot.forEach(function (objSnapshot) {
    objSnapshot.forEach(function (snapshot) {
        var val = snapshot.val();
        console.log(val); // Should print your object
    });
});
Devid Farinelli
  • 7,514
  • 9
  • 42
  • 73
  • 1
    PS: you can copy an object from chrome devtools right clicking it > save as temp variable. It will print something like `temp1`, if you write in chrome console `copy(temp1)` you'll be able to paste it on any editor ;) – Devid Farinelli Jul 19 '17 at 12:17
  • 1
    Thanks for the tip sir. :) – Noman Ali Jul 19 '17 at 12:23
2

Will the tree increase in depth? If not, then the best solution here is to just do a double for loop.

snapshot.forEach(function (snapshot) {
    var key = snapshot.key();
    var obj = snapshot.val();
    console.log(key);
    //output => Folder1 , Folder2 etc

    obj.forEach(function (book) {
        var title = book.title;
        var author = book.author;
    });
});

No need to over-engineer things, in my opinion.

itsmichaelwang
  • 2,282
  • 4
  • 16
  • 25
1

Heres simple way how you can get your object of objects to array of objects:

var myObject = {key1: {name: 'hello'}, key2: {name: 'hello2'}}; 
var myArrayOfObject = Object.values(myObject);

console.log(myArrayOfObject);
// Result: (2) [Object, Object]