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?

3 Answers 3

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
    });
});
Sign up to request clarification or add additional context in comments.

2 Comments

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 ;)
Thanks for the tip sir. :)
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.

1 Comment

var key = snapshot.key, you should not call as a function
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]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.