JavaScript数组关联过滤:如何匹配content对应的user字段?
解决数组关联筛选问题:保留匹配phone分类content对应的user
嘿,你已经搞定了content部分的过滤工作,现在只需要在处理流程里加上对user数组的关联筛选就可以啦!核心思路是:先从过滤后的content里拿到所有匹配的uId集合,再用这个集合去过滤user数组。
修改后的代码实现
var testList = [{ content:[ {id:1,uId:1,text:"apple", category: "phone"}, {id:2,uId:2,text:"nick",category: "life"}, {id:3,uId:3,text:"samsung",category: "phone"} ], user:[ {id:1,name: "Joe"}, {id:2,name: "red"}, {id:3,name: "blue"} ] }]; const newArrys = testList .filter((element) => element.content.some((subElement) => subElement.category == "phone")) .map(element => { // 先过滤出category为phone的content条目 const filteredContent = element.content.filter(subElement => subElement.category == "phone"); // 提取这些content对应的uId集合(用Set去重,避免重复id的情况) const matchedUserIds = new Set(filteredContent.map(item => item.uId)); // 过滤user数组,只保留id在集合中的条目 const filteredUsers = element.user.filter(user => matchedUserIds.has(user.id)); // 返回新的对象,包含过滤后的content和user return Object.assign({}, element, { content: filteredContent, user: filteredUsers }); }); console.log(newArrys);
代码说明
- 先完成你原本已经写好的content过滤,得到
filteredContent - 用
map提取filteredContent里所有的uId,存入Set集合(这样可以自动去重,即使有多个content对应同一个user也不会重复处理) - 对
element.user进行过滤,只保留id存在于matchedUserIds集合中的用户条目 - 最后用
Object.assign返回包含过滤后content和user的新对象
运行结果
这样修改后,输出就会和你期望的一致:
[{ content:[ {id:1,uId:1,text:"apple", category: "phone"}, {id:3,uId:3,text:"samsung",category: "phone"} ], user:[ {id:1,name: "Joe"}, {id:3,name: "blue"} ] }]
内容的提问来源于stack exchange,提问作者BaiClassmate Xiao
相关产品推荐
相关产品推荐

