API响应数组筛选问题:获取def为true的地址列表及特定条件对象列表
API响应数组筛选问题:获取def为true的地址列表及特定条件对象列表
我来帮你搞定这个数组筛选的问题,先拆解下你遇到的两个问题,再给出对应的解决方案:
问题1:获取所有def: true的地址并以逗号分隔
你之前用map直接返回了所有地址,所以会包含def: false的项。正确的思路是先筛选符合条件的元素,再提取地址,代码如下:
// 假设你已经拿到了API返回的data,这里先取rspa数组 const myArray = data.rspa; // 先过滤出def为true的元素,再提取address,最后用逗号拼接 const filteredAddrs = myArray .filter(item => item.def === true) // 筛选def为true的对象 .map(item => item.address) // 提取这些对象的address属性 .join(","); console.log(filteredAddrs); // 输出:FA0EBFB496DA-C5465A8D,FA0434B496DA-C5465A8D
问题2:找到单个def: true的对象的地址(避免报错)
你之前的代码有两个明显的问题:
- 把
idToLookFor设成了字符串'true',但API返回的def是布尔值true,用===严格比较会不匹配,导致筛选不到任何元素; - 直接取
filter结果的[0],如果没有符合条件的元素,[0]就是undefined,再访问.address就会抛出Cannot read properties of undefined的错误。
修正后的代码如下,会先判断是否存在符合条件的元素,再提取地址:
const myArray = data.rspa; // 筛选所有def为true的对象 const foundObjects = myArray.filter(item => item.def === true); // 先判断是否有符合条件的元素,再取第一个的address if (foundObjects.length > 0) { const firstFoundAddr = foundObjects[0].address; console.log(firstFoundAddr); // 输出:FA0EBFB496DA-C5465A8D } else { console.log("没有找到def为true的地址"); }
如果你想获取所有def: true的完整对象列表,直接用foundObjects就可以了,它会包含所有符合条件的对象。
备注:内容来源于stack exchange,提问作者Damira
相关产品推荐
相关产品推荐

