How to find a property in a nested object












-1















I'm trying to figure out how to extract result based on an object property value that is inside another object e.g



{
title: 'The Book',
author: {
name: 'Merlin Bridge',
category: 'Fiction'
}
}


Here are my tests:



  // this works
const test1 = _.find(existingBooks, {
title: uploadedBooks[i].title,
});

// this doesn't work and returns nothing
const test2 = _.find(existingBooks, {
'author.name': uploadedBooks[i].author.name,
});


I want to get the result wherein the author.name is the identifier. Thanks a lot.










share|improve this question



























    -1















    I'm trying to figure out how to extract result based on an object property value that is inside another object e.g



    {
    title: 'The Book',
    author: {
    name: 'Merlin Bridge',
    category: 'Fiction'
    }
    }


    Here are my tests:



      // this works
    const test1 = _.find(existingBooks, {
    title: uploadedBooks[i].title,
    });

    // this doesn't work and returns nothing
    const test2 = _.find(existingBooks, {
    'author.name': uploadedBooks[i].author.name,
    });


    I want to get the result wherein the author.name is the identifier. Thanks a lot.










    share|improve this question

























      -1












      -1








      -1








      I'm trying to figure out how to extract result based on an object property value that is inside another object e.g



      {
      title: 'The Book',
      author: {
      name: 'Merlin Bridge',
      category: 'Fiction'
      }
      }


      Here are my tests:



        // this works
      const test1 = _.find(existingBooks, {
      title: uploadedBooks[i].title,
      });

      // this doesn't work and returns nothing
      const test2 = _.find(existingBooks, {
      'author.name': uploadedBooks[i].author.name,
      });


      I want to get the result wherein the author.name is the identifier. Thanks a lot.










      share|improve this question














      I'm trying to figure out how to extract result based on an object property value that is inside another object e.g



      {
      title: 'The Book',
      author: {
      name: 'Merlin Bridge',
      category: 'Fiction'
      }
      }


      Here are my tests:



        // this works
      const test1 = _.find(existingBooks, {
      title: uploadedBooks[i].title,
      });

      // this doesn't work and returns nothing
      const test2 = _.find(existingBooks, {
      'author.name': uploadedBooks[i].author.name,
      });


      I want to get the result wherein the author.name is the identifier. Thanks a lot.







      javascript lodash






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jul 26 '18 at 11:23









      WoppiWoppi

      2,46843059




      2,46843059
























          5 Answers
          5






          active

          oldest

          votes


















          2














          As you are using Lodash/Underscore find, I took the liberty to also use the get helper. Please find below an answer which should help you.






          const books = [{
          title: 'The Book',
          author: {
          name: 'Merlin Bridge',
          category: 'Fiction'
          }
          },
          {
          title: 'Another Book',
          author: {
          name: 'Merlin Window',
          category: 'Science'
          }
          }
          ];
          const uploadedBooks = [{
          title: 'Another Book',
          author: {
          name: 'Merlin Window',
          category: 'Science'
          }
          }];
          const i = 0;
          const foundBook = _.find(books, (book, index) => {
          return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
          });
          console.log(foundBook);

          <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>








          share|improve this answer































            3














            You can Use below code to iterate your json object.






            var myObj = {
            title: 'The Book',
            author: {
            name: 'Merlin Bridge',
            category: 'Fiction'
            }
            }
            Object.keys(myObj).forEach(key => {
            console.log(JSON.stringify(myObj[key]));
            });








            share|improve this answer



















            • 1





              Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

              – Woppi
              Jul 26 '18 at 11:41



















            2














            It's possible to add dynamically named properties to JavaScript objects.



            Assuming you are looping an array and not an object:



            var a = _.map(existingBooksArray, function(existingBook) {
            return {[existingBook.author.name]: existingBook.title}
            });


            Result of a:



            [
            {
            Merlin Bridge: "The Book"
            }
            ]





            share|improve this answer
























            • @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

              – Woppi
              Jul 26 '18 at 11:48



















            1














            use .key method



            Object.keys(myObj).forEach(key => {
            console.log(myObj[key]);});





            var myObj = {
            title: 'The Book',
            author: {
            name: 'Merlin Bridge',
            category: 'Fiction'
            }
            }

            Object.keys(myObj).forEach(key => {
            console.log(JSON.stringify(myObj[key]));
            });








            share|improve this answer

































              0

















              var myObj = {
              title: 'The Book',
              author: {
              name: 'Merlin Bridge',
              category: 'Fiction'
              }
              }
              Object.keys(myObj).forEach(key => {
              console.log(JSON.stringify(myObj[key]));
              });








              share|improve this answer























                Your Answer






                StackExchange.ifUsing("editor", function () {
                StackExchange.using("externalEditor", function () {
                StackExchange.using("snippets", function () {
                StackExchange.snippets.init();
                });
                });
                }, "code-snippets");

                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "1"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51537651%2fhow-to-find-a-property-in-a-nested-object%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                5 Answers
                5






                active

                oldest

                votes








                5 Answers
                5






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                2














                As you are using Lodash/Underscore find, I took the liberty to also use the get helper. Please find below an answer which should help you.






                const books = [{
                title: 'The Book',
                author: {
                name: 'Merlin Bridge',
                category: 'Fiction'
                }
                },
                {
                title: 'Another Book',
                author: {
                name: 'Merlin Window',
                category: 'Science'
                }
                }
                ];
                const uploadedBooks = [{
                title: 'Another Book',
                author: {
                name: 'Merlin Window',
                category: 'Science'
                }
                }];
                const i = 0;
                const foundBook = _.find(books, (book, index) => {
                return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                });
                console.log(foundBook);

                <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>








                share|improve this answer




























                  2














                  As you are using Lodash/Underscore find, I took the liberty to also use the get helper. Please find below an answer which should help you.






                  const books = [{
                  title: 'The Book',
                  author: {
                  name: 'Merlin Bridge',
                  category: 'Fiction'
                  }
                  },
                  {
                  title: 'Another Book',
                  author: {
                  name: 'Merlin Window',
                  category: 'Science'
                  }
                  }
                  ];
                  const uploadedBooks = [{
                  title: 'Another Book',
                  author: {
                  name: 'Merlin Window',
                  category: 'Science'
                  }
                  }];
                  const i = 0;
                  const foundBook = _.find(books, (book, index) => {
                  return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                  });
                  console.log(foundBook);

                  <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>








                  share|improve this answer


























                    2












                    2








                    2







                    As you are using Lodash/Underscore find, I took the liberty to also use the get helper. Please find below an answer which should help you.






                    const books = [{
                    title: 'The Book',
                    author: {
                    name: 'Merlin Bridge',
                    category: 'Fiction'
                    }
                    },
                    {
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }
                    ];
                    const uploadedBooks = [{
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }];
                    const i = 0;
                    const foundBook = _.find(books, (book, index) => {
                    return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                    });
                    console.log(foundBook);

                    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>








                    share|improve this answer













                    As you are using Lodash/Underscore find, I took the liberty to also use the get helper. Please find below an answer which should help you.






                    const books = [{
                    title: 'The Book',
                    author: {
                    name: 'Merlin Bridge',
                    category: 'Fiction'
                    }
                    },
                    {
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }
                    ];
                    const uploadedBooks = [{
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }];
                    const i = 0;
                    const foundBook = _.find(books, (book, index) => {
                    return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                    });
                    console.log(foundBook);

                    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>








                    const books = [{
                    title: 'The Book',
                    author: {
                    name: 'Merlin Bridge',
                    category: 'Fiction'
                    }
                    },
                    {
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }
                    ];
                    const uploadedBooks = [{
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }];
                    const i = 0;
                    const foundBook = _.find(books, (book, index) => {
                    return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                    });
                    console.log(foundBook);

                    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>





                    const books = [{
                    title: 'The Book',
                    author: {
                    name: 'Merlin Bridge',
                    category: 'Fiction'
                    }
                    },
                    {
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }
                    ];
                    const uploadedBooks = [{
                    title: 'Another Book',
                    author: {
                    name: 'Merlin Window',
                    category: 'Science'
                    }
                    }];
                    const i = 0;
                    const foundBook = _.find(books, (book, index) => {
                    return _.get(book, 'author.name') === _.get(uploadedBooks, [i, 'author', 'name'])
                    });
                    console.log(foundBook);

                    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Jul 26 '18 at 12:23









                    ChrisRChrisR

                    2,2541517




                    2,2541517

























                        3














                        You can Use below code to iterate your json object.






                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });








                        share|improve this answer



















                        • 1





                          Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                          – Woppi
                          Jul 26 '18 at 11:41
















                        3














                        You can Use below code to iterate your json object.






                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });








                        share|improve this answer



















                        • 1





                          Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                          – Woppi
                          Jul 26 '18 at 11:41














                        3












                        3








                        3







                        You can Use below code to iterate your json object.






                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });








                        share|improve this answer













                        You can Use below code to iterate your json object.






                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });








                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });





                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }
                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });






                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered Jul 26 '18 at 11:34









                        Kiran GhatageKiran Ghatage

                        253713




                        253713








                        • 1





                          Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                          – Woppi
                          Jul 26 '18 at 11:41














                        • 1





                          Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                          – Woppi
                          Jul 26 '18 at 11:41








                        1




                        1





                        Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                        – Woppi
                        Jul 26 '18 at 11:41





                        Thanks a lot. It also worked. However, I went ahead with ` existingBooks.find((book) => { const { author: { name } } = book; return name === uploadedBooks[i].author.name; });` and did not use lodash for this after finding out about javascript's find :)

                        – Woppi
                        Jul 26 '18 at 11:41











                        2














                        It's possible to add dynamically named properties to JavaScript objects.



                        Assuming you are looping an array and not an object:



                        var a = _.map(existingBooksArray, function(existingBook) {
                        return {[existingBook.author.name]: existingBook.title}
                        });


                        Result of a:



                        [
                        {
                        Merlin Bridge: "The Book"
                        }
                        ]





                        share|improve this answer
























                        • @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                          – Woppi
                          Jul 26 '18 at 11:48
















                        2














                        It's possible to add dynamically named properties to JavaScript objects.



                        Assuming you are looping an array and not an object:



                        var a = _.map(existingBooksArray, function(existingBook) {
                        return {[existingBook.author.name]: existingBook.title}
                        });


                        Result of a:



                        [
                        {
                        Merlin Bridge: "The Book"
                        }
                        ]





                        share|improve this answer
























                        • @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                          – Woppi
                          Jul 26 '18 at 11:48














                        2












                        2








                        2







                        It's possible to add dynamically named properties to JavaScript objects.



                        Assuming you are looping an array and not an object:



                        var a = _.map(existingBooksArray, function(existingBook) {
                        return {[existingBook.author.name]: existingBook.title}
                        });


                        Result of a:



                        [
                        {
                        Merlin Bridge: "The Book"
                        }
                        ]





                        share|improve this answer













                        It's possible to add dynamically named properties to JavaScript objects.



                        Assuming you are looping an array and not an object:



                        var a = _.map(existingBooksArray, function(existingBook) {
                        return {[existingBook.author.name]: existingBook.title}
                        });


                        Result of a:



                        [
                        {
                        Merlin Bridge: "The Book"
                        }
                        ]






                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered Jul 26 '18 at 11:39









                        shmotamshmotam

                        6892719




                        6892719













                        • @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                          – Woppi
                          Jul 26 '18 at 11:48



















                        • @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                          – Woppi
                          Jul 26 '18 at 11:48

















                        @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                        – Woppi
                        Jul 26 '18 at 11:48





                        @ thanks, this solution also worked but my use-case is more of find than map since I'm not transforming anything. :) medium.com/@JeffLombardJr/…

                        – Woppi
                        Jul 26 '18 at 11:48











                        1














                        use .key method



                        Object.keys(myObj).forEach(key => {
                        console.log(myObj[key]);});





                        var myObj = {
                        title: 'The Book',
                        author: {
                        name: 'Merlin Bridge',
                        category: 'Fiction'
                        }
                        }

                        Object.keys(myObj).forEach(key => {
                        console.log(JSON.stringify(myObj[key]));
                        });








                        share|improve this answer






























                          1














                          use .key method



                          Object.keys(myObj).forEach(key => {
                          console.log(myObj[key]);});





                          var myObj = {
                          title: 'The Book',
                          author: {
                          name: 'Merlin Bridge',
                          category: 'Fiction'
                          }
                          }

                          Object.keys(myObj).forEach(key => {
                          console.log(JSON.stringify(myObj[key]));
                          });








                          share|improve this answer




























                            1












                            1








                            1







                            use .key method



                            Object.keys(myObj).forEach(key => {
                            console.log(myObj[key]);});





                            var myObj = {
                            title: 'The Book',
                            author: {
                            name: 'Merlin Bridge',
                            category: 'Fiction'
                            }
                            }

                            Object.keys(myObj).forEach(key => {
                            console.log(JSON.stringify(myObj[key]));
                            });








                            share|improve this answer















                            use .key method



                            Object.keys(myObj).forEach(key => {
                            console.log(myObj[key]);});





                            var myObj = {
                            title: 'The Book',
                            author: {
                            name: 'Merlin Bridge',
                            category: 'Fiction'
                            }
                            }

                            Object.keys(myObj).forEach(key => {
                            console.log(JSON.stringify(myObj[key]));
                            });








                            var myObj = {
                            title: 'The Book',
                            author: {
                            name: 'Merlin Bridge',
                            category: 'Fiction'
                            }
                            }

                            Object.keys(myObj).forEach(key => {
                            console.log(JSON.stringify(myObj[key]));
                            });





                            var myObj = {
                            title: 'The Book',
                            author: {
                            name: 'Merlin Bridge',
                            category: 'Fiction'
                            }
                            }

                            Object.keys(myObj).forEach(key => {
                            console.log(JSON.stringify(myObj[key]));
                            });






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited Dec 24 '18 at 7:01

























                            answered Nov 16 '18 at 6:08









                            Pooja NandnikarPooja Nandnikar

                            124




                            124























                                0

















                                var myObj = {
                                title: 'The Book',
                                author: {
                                name: 'Merlin Bridge',
                                category: 'Fiction'
                                }
                                }
                                Object.keys(myObj).forEach(key => {
                                console.log(JSON.stringify(myObj[key]));
                                });








                                share|improve this answer




























                                  0

















                                  var myObj = {
                                  title: 'The Book',
                                  author: {
                                  name: 'Merlin Bridge',
                                  category: 'Fiction'
                                  }
                                  }
                                  Object.keys(myObj).forEach(key => {
                                  console.log(JSON.stringify(myObj[key]));
                                  });








                                  share|improve this answer


























                                    0












                                    0








                                    0










                                    var myObj = {
                                    title: 'The Book',
                                    author: {
                                    name: 'Merlin Bridge',
                                    category: 'Fiction'
                                    }
                                    }
                                    Object.keys(myObj).forEach(key => {
                                    console.log(JSON.stringify(myObj[key]));
                                    });








                                    share|improve this answer
















                                    var myObj = {
                                    title: 'The Book',
                                    author: {
                                    name: 'Merlin Bridge',
                                    category: 'Fiction'
                                    }
                                    }
                                    Object.keys(myObj).forEach(key => {
                                    console.log(JSON.stringify(myObj[key]));
                                    });








                                    var myObj = {
                                    title: 'The Book',
                                    author: {
                                    name: 'Merlin Bridge',
                                    category: 'Fiction'
                                    }
                                    }
                                    Object.keys(myObj).forEach(key => {
                                    console.log(JSON.stringify(myObj[key]));
                                    });





                                    var myObj = {
                                    title: 'The Book',
                                    author: {
                                    name: 'Merlin Bridge',
                                    category: 'Fiction'
                                    }
                                    }
                                    Object.keys(myObj).forEach(key => {
                                    console.log(JSON.stringify(myObj[key]));
                                    });






                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Nov 14 '18 at 12:20









                                    vizviz

                                    417




                                    417






























                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Stack Overflow!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51537651%2fhow-to-find-a-property-in-a-nested-object%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Bressuire

                                        Vorschmack

                                        Quarantine