Home > Software engineering >  How to use find() method on an Object within an Object
How to use find() method on an Object within an Object

Time:09-30

I'm trying to return the object within comments_text that has the key that matches findKey.

const findKey = "-MkeQEa2sgCho_ijk7TO"

const posts = [
    0:{
        comment: false,
        comments_text: {
            0: {
                commenter_comment: "test1",
                commenter_handle: "LEOPARD1",
                commenter_uid: "ErGGzFxr4oPjWCEAPuNpdTdzPu63",
                key: "-MkeQEa2sgCho_ijk7TO"
            },
            1: {
                commenter_comment: "test2",
                commenter_handle: "LEOPARD1",
                commenter_uid: "ErGGzFxr4oPjWCEAPuNpdTdzPu63",
                key: "-MkeQM4yD95PSEPfAj4v"
            }
        },
        handle: "username1",
        key: "-MkePAHv8kux6INOSCji",
        title: "Hello"
      }
]

As an example, in this case, since findKey is "-MkeQEa2sgCho_ijk7TO", then this would be returned:

            {
                commenter_comment: "test1",
                commenter_handle: "LEOPARD1",
                commenter_uid: "ErGGzFxr4oPjWCEAPuNpdTdzPu63",
                key: "-MkeQEa2sgCho_ijk7TO"
            }

I have tried the following...

const returnMatchingObject = posts.comments_text.find(object=> object.key === findKey);

However, I'm receiving an error message of "Cannot read properties of undefined (reading 'find')"

I feel like I'm accessing the Object incorrectly. How can I improve this? Thank you for reviewing and for any help.

CodePudding user response:

You need to loop through your posts (assuming there's going to be more than one post in your array).

Your comments_text also needs to be an array of objects. Once you're in the loop you can search within it to find your key:

const findKey = "-MkeQEa2sgCho_ijk7TO";

const posts = [{
  comment: false,
  comments_text: [{
      commenter_comment: "test1",
      commenter_handle: "LEOPARD1",
      commenter_uid: "ErGGzFxr4oPjWCEAPuNpdTdzPu63",
      key: "-MkeQEa2sgCho_ijk7TO"
    },
    {
      commenter_comment: "test2",
      commenter_handle: "LEOPARD1",
      commenter_uid: "ErGGzFxr4oPjWCEAPuNpdTdzPu63",
      key: "-MkeQM4yD95PSEPfAj4v"
    }
  ],
  handle: "username1",
  key: "-MkePAHv8kux6INOSCji",
  title: "Hello"
}]


posts.forEach((post) => {
  const returnMatchingObject = post.comments_text.find(object => object.key === findKey);

  console.log(returnMatchingObject);
})

CodePudding user response:

Similar to other answer, looping over the posts array to find the matching nested comments_text object property. Difference is it breaks out of the loop at the first found match and doesn't require the post.comments_text property to be an array first.

let item;

for (const post of posts) {
  item = Object.values(post.comments_text).find(
    (comment) => comment.key === findKey
  );

  if (item) {
    break;
  }
}

  • Related