如何在嵌套对象结构中使用find()方法匹配key获取对应对象
报错原因分析
- 首先
posts是数组类型,你需要先通过下标获取到数组内的post对象,直接访问posts.comments_text会得到undefined,自然无法调用find方法。 - 其次
comments_text是普通对象结构,find是数组专属方法,不能直接在对象上调用。
正确实现代码
场景1:只查找第一个post下的匹配评论
如果你的需求是只从示例里的第一个post对象的评论中查找,直接用Object.values()把comments_text的属性值转为数组后再调用find即可:
const returnMatchingObject = Object.values(posts[0].comments_text).find(obj => obj.key === findKey);
场景2:遍历所有post下的所有评论查找匹配项
如果posts数组里有多个post对象,需要全量查找所有评论,就先把所有post的评论合并为一个数组再查找:
// 提取所有post的所有评论转为一维数组 const allComments = posts.flatMap(post => Object.values(post.comments_text || {})); // 查找匹配key的对象 const returnMatchingObject = allComments.find(obj => obj.key === findKey);
代码说明
Object.values()方法可以返回指定对象所有自身可枚举属性的值组成的数组,将comments_text转为数组结构后就可以正常使用find方法匹配目标对象。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

