You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

代码说明

  1. 先完成你原本已经写好的content过滤,得到filteredContent
  2. 用map提取filteredContent里所有的uId,存入Set集合(这样可以自动去重,即使有多个content对应同一个user也不会重复处理)
  3. 对element.user进行过滤,只保留id存在于matchedUserIds集合中的用户条目
  4. 最后用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:04:52