API返回Proxy结构数据,如何访问数组对象属性并过滤links?
解决方案
1. 先解决Proxy嵌套属性访问问题
因为你的数据被Proxy包装,直接访问嵌套属性(比如link.source.name)可能被拦截导致返回undefined,需要先拿到原始的非代理化数据:
// 方法1:将Proxy转为普通对象(适合无循环引用的场景) const rawChart = JSON.parse(JSON.stringify(this.chart)); const rawLinks = rawChart.links; // 方法2:直接获取Proxy的原始目标对象(部分环境支持) const rawLinks = this.chart[[Target]].links;
2. 修正过滤逻辑
你原来的过滤逻辑存在逻辑漏洞:io.source.name || io.target.name是短路判断,只会检查第一个非假值的属性,无法同时校验source和target的name。正确逻辑应该是:只要source.name或target.name在过滤列表中,就排除该link。
const dataToFilter = ['String1', 'String2']; const filteredLinks = rawLinks.filter(link => { const sourceMatch = dataToFilter.includes(link.source.name); const targetMatch = dataToFilter.includes(link.target.name); // 仅保留source和target的name都不在过滤列表中的link return !sourceMatch && !targetMatch; });
问题根源说明
- Proxy拦截:Proxy可能对嵌套对象的属性访问做了拦截处理,导致直接访问
link.source.name无法拿到真实值,必须先获取原始数据。 - 逻辑错误:原代码的
||运算符会短路执行,无法同时校验source和target的name是否在过滤列表中,导致过滤结果不符合预期。
内容的提问来源于stack exchange,提问作者user17206275
相关产品推荐
相关产品推荐

