如何用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"] }
代码逻辑说明
- 创建空对象
result用于存储最终分组结果 - 遍历
prgList中的每个程序项:- 用
filter筛选出prg字段包含当前程序项的用户对象 - 用
map将筛选后的用户对象转换为仅含用户名的数组 - 将数组赋值给
result中以当前程序项为键的属性
- 用
内容的提问来源于stack exchange,提问作者Sen
相关产品推荐
相关产品推荐

