Estoy tratando de recorrer un objeto ( objectToLoop ) y verificar si contiene la clave comments_text . Si es así, quiero verificar comments_text , y si la key dentro de comments_text coincide con commentId , quiero configurar let item para todo el objeto dentro de coments_text .
Estoy tratando de configurar let item en lo siguiente, pero me sale "indefinido":
{ commenter_comment: "reedwe", commenter_handle: "FALCON1", commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1", key: "-MlaKXBMXzXIBJMsZQNX" }Consejos y comentarios apreciados.
const commentId = "-MlaKXBMXzXIBJMsZQNX" const objectToLoop = { comment: false, comments_text: { commenter_comment: "reedwe", commenter_handle: "FALCON1", commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1", key: "-MlaKXBMXzXIBJMsZQNX" }, handle: "TURTLE1", key: "-MkeOOUboKdOcC3Sannl", title: "hello2" } function returnMatchingComment(commentIdKey) { let item; for (const post in objectToLoop) { if (post.comments_text) { item = Object.values(post.comments_text).find( (comment) => comment.key === commentIdKey ) }; if (item) { break; } } return item } console.log( returnMatchingComment(commentId) )No necesita usar el bucle for...in . Primero puede verificar si objectToLoop tiene la propiedad comments_text usando Object.prototype.hasOwnProperty() y verificar si objectToLoop?.comments_text?.key == commentId . usé ?. (encadenamiento opcional) de modo que si objectToLoop.comments_text no existiera, simplemente devolvería undefined y no arrojaría un error feo.
Ejemplo:
const commentId = "-MlaKXBMXzXIBJMsZQNX" const objectToLoop = { comment: false, comments_text: { commenter_comment: "reedwe", commenter_handle: "FALCON1", commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1", key: "-MlaKXBMXzXIBJMsZQNX" }, handle: "TURTLE1", key: "-MkeOOUboKdOcC3Sannl", title: "hello2" } if(objectToLoop.hasOwnProperty('comments_text') && objectToLoop?.comments_text?.key == commentId) { let item = objectToLoop.comments_text; console.log(item) }objectToLoop.hasOwnProperty('comments_text') como con el encadenamiento opcional (como se mencionó anteriormente), objectToLoop?.comments_text?.key == commentId simplemente devolvería undefined si objectToLoop.comments_text no existiera o false si objectToLoop.comments_text.key no era igual a commentId . const commentId = "-MlaKXBMXzXIBJMsZQNX" const objectToLoop = { comment: false, comments_text: { commenter_comment: "reedwe", commenter_handle: "FALCON1", commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1", key: "-MlaKXBMXzXIBJMsZQNX" }, handle: "TURTLE1", key: "-MkeOOUboKdOcC3Sannl", title: "hello2" } if(objectToLoop?.comments_text?.key == commentId) { let item = objectToLoop.comments_text; console.log(item) }Puedes poner algo de depuración. Tu si nunca disparas. El registro 'i' te da una gran información =)
const commentId = "-MlaKXBMXzXIBJMsZQNX" const objectToLoop = { comment: false, comments_text: { commenter_comment: "reedwe", commenter_handle: "FALCON1", commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1", key: "-MlaKXBMXzXIBJMsZQNX" }, handle: "TURTLE1", key: "-MkeOOUboKdOcC3Sannl", title: "hello2" } function returnMatchingComment(commentIdKey) { let item; var i =0; for (const post in objectToLoop) { console.log(post,i++); if (post.comments_text) { console.log("APPEND"); item = Object.values(post.comments_text).find( (comment) => comment.key === commentIdKey ) }; if (item) { break; } } return item } console.log( returnMatchingComment(commentId) )