如何同时使用多个Array.filter?当前代码无返回结果求助
问题分析与解决
你的代码错误点
- 数组调用方式错误:
Obj.details是数组类型,不是函数,不能直接通过Obj.details(回调)的方式调用,这种写法会触发TypeError;就算忽略错误,这个表达式返回undefined,而Array.filter会过滤掉返回false/undefined的元素,最终得到空数组。 - 需求逻辑偏差:你的代码试图过滤外层的
data数组,但实际需求是对每个Person对象,拆分其details中的A、P状态数据,重组为新结构,而非过滤Person。
正确实现代码
要得到你想要的结构,需要用Array.map遍历每个Person,再对每个Person的details分别过滤A和P状态的元素,重组对象:
// 处理所有Person的情况 const result = data.map(person => ({ name: person.name, A: person.details.filter(item => item.status === 'A'), P: person.details.filter(item => item.status === 'P') })); // 如果只需要前2个Person(匹配你的示例输出) const result = data.slice(0, 2).map(person => ({ name: person.name, A: person.details.filter(item => item.status === 'A'), P: person.details.filter(item => item.status === 'P') }));
代码解释
map:遍历原数组的每个Person对象,返回一个新的对象数组。- 每个新对象保留原
name属性,同时新增A和P两个数组:A数组:通过details.filter筛选出所有status为'A'的元素。P数组:同理筛选出status为'P'的元素。
- 如果需要只保留部分Person(比如示例中的前2个),用
slice(0,2)截取原数组的前两个元素即可。
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

