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

如何用JavaScript基于条件通过对象数组与列表分组获取用户名

按程序分组获取对应用户名的JavaScript实现

需求:给定对象数组arrobj和程序列表prgList,需根据prgList中的每个程序项,从arrobj中筛选出所有prg字段包含该程序的用户名称,最终以「程序名为键、用户名称数组为值」的对象形式输出结果。

你尝试的代码存在两处核心问题:

var lists=[]
var result =arrobj.find(e=> e.prg.includes(prgList) ? lists.push(e))); // bit stuck
  • find方法仅返回第一个匹配元素,无法获取所有符合条件的用户
  • e.prg.includes(prgList)是判断数组是否包含整个prgList数组,和需求中「判断prg是否包含单个程序项」的逻辑不符

示例数据

var arrobj = [
  {id:1, name: "user1", prg: ["onex", "twox", "threex"]},
  {id:2, name: "user2", prg: ["onex", "threex"]},
  {id:3, name: "user3", prg: ["twox", "threex"]}
]

var prgList = ["onex", "twox", "threex"]

正确实现代码

// 初始化结果存储对象
const result = {};

// 遍历每个程序项,完成分组匹配
prgList.forEach(prg => {
  result[prg] = arrobj
    .filter(user => user.prg.includes(prg))
    .map(user => user.name);
});

console.log(result);

预期输出

{
  onex: ["user1", "user2"],
  twox: ["user1", "user3"],
  threex: ["user1", "user2", "user3"]
}

代码逻辑说明

  1. 创建空对象result用于存储最终分组结果
  2. 遍历prgList中的每个程序项:
    • 用filter筛选出prg字段包含当前程序项的用户对象
    • 用map将筛选后的用户对象转换为仅含用户名的数组
    • 将数组赋值给result中以当前程序项为键的属性

内容的提问来源于stack exchange,提问作者Sen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:45:58