如何基于isActive标志过滤API返回的对象数组?
解决方法
先修正你代码里的核心问题,再实现正确的过滤逻辑:
1. 修复异步函数的递归问题
你定义的GetList函数内部又调用了同名的GetList(),这会触发无限递归,先把函数名改成不同的,比如fetchItemList:
const fetchItemList = async () => { const [data, error] = await GetList(); // 这里的GetList是原接口请求函数 if (error) { console.error('获取列表失败:', error); return []; } return data; };
2. 用data变量实现正确过滤
你提到数组实际存在data中,但之前的代码误用了未定义的response,这是报错的主要原因。另外注意isActive的实际类型,分两种情况处理:
- 如果
isActive是布尔值(true/false),直接判断值本身即可 - 如果
isActive是字符串类型('true'/'false'),才用字符串匹配
完整实现示例
// 获取并过滤列表的完整函数 const getActiveItems = async () => { const [data, error] = await GetList(); if (error) { console.error('请求出错:', error); return []; } // 选择对应情况的过滤逻辑 // 情况1:isActive为布尔值 const activeItems = data.filter(obj => obj.isActive); // 情况2:isActive为字符串类型 // const activeItems = data.filter(obj => obj.isActive === 'true'); console.log('过滤后的活跃元素:', activeItems); return activeItems; }; // 执行函数 getActiveItems();
额外提醒
- 务必处理
error分支,避免请求失败时后续代码崩溃 - 可以先打印
data[0].isActive确认该字段的实际类型,再调整过滤条件
内容的提问来源于stack exchange,提问作者Smeagol
相关产品推荐
相关产品推荐

