JavaScript 根据指定键提取JSON对象 筛选type为vente报错解决
报错核心原因
代码的问题本质是搞错了数据层级:
- 最外层的
data是数组,数组元素本身没有type字段,它只是一个包裹了annonces属性的容器对象 - 带
type属性的单条房源,是嵌套在data[0].annonces下、以房源ID为键的二级对象中,不在data.filter直接遍历的层级上,所以TypeScript才会报“元素上不存在type属性”的类型错误。
修正后的实现逻辑
- 先从最外层数组取出存所有房源的
annonces对象 - 用
Object.entries()把键值对格式的房源集合转成可遍历的数组 - 对数组做条件过滤,仅保留
type等于vente的房源条目 - 如果需要和原数据结构保持一致,再把过滤后的条目重新组装成键值对对象
可直接运行的代码
// 定位到嵌套的房源集合 const allAnnonces = data[0].annonces; // 过滤符合type="vente"条件的房源 const filteredEntries = Object.entries(allAnnonces).filter(([_, detail]) => { return detail.type === "vente"; }); // 还原为和原结构一致的对象格式 const data_filter = Object.fromEntries(filteredEntries); console.log(data_filter);
大文件处理提示
- 处理大体量JSON时,不要凭印象写遍历逻辑,先打印一级结构确认属性路径,避免层级判断错误
- 上述代码执行后,仅会保留ID为
20165794的房源条目,其余两条type为location的内容会被过滤移除
内容的提问来源于stack exchange,提问作者Runfast Webmaster
相关产品推荐
相关产品推荐

