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

JavaScript索引与搜索问题求助:用户数组分组及搜索方法异常

解决用户分组与搜索方法的问题

我来帮你排查这两个方法的问题,先修正分组逻辑,再实现符合要求的搜索方法:

1. 修正 orchestrateUsers 分组方法

你当前的orchestrateUsers只是提取了用户的name和type属性,但完全没做按type分组的逻辑,这就是返回结果不符合预期的核心原因。咱们调整一下,把同类型的用户归到同一组:

let userTypes = ["Admin", "Moderator", "User"];

function orchestrateUsers(users) {
  // 用对象临时存储分组,键为用户类型,值为对应类型的用户数组
  const tempGroups = {};

  users.forEach(user => {
    // 提取需要保留的用户属性(可根据需求调整)
    const userItem = { name: user.name, type: user.type, companyId: user.companyId };
    
    // 如果当前类型还没创建分组,先初始化空数组
    if (!tempGroups[user.type]) {
      tempGroups[user.type] = [];
    }
    // 将用户加入对应类型的分组
    tempGroups[user.type].push(userItem);
  });

  // 转换成规范的分组列表结构,确保包含所有预设的用户类型
  return userTypes.map(type => ({
    type: type,
    users: tempGroups[type] || [] // 处理无该类型用户的边界情况
  }));
}

修正后,这个方法会返回如下结构的分组列表:

[
  { type: "Admin", users: [/* 所有Admin用户对象 */] },
  { type: "Moderator", users: [/* 所有Moderator用户对象 */] },
  { type: "User", users: [/* 所有User用户对象 */] }
]

2. 实现 searchUsers 搜索方法

接下来咱们完成搜索逻辑,它需要从分组列表里筛选出指定类型且目标属性匹配指定值的用户:

function searchUsers(orchestratedUsers, targetTypes, property, value) {
  let matchedUsers = [];

  // 遍历要搜索的用户类型,找到对应的分组
  targetTypes.forEach(type => {
    const targetGroup = orchestratedUsers.find(group => group.type === type);
    if (!targetGroup) return; // 没有对应分组就跳过

    // 在分组内过滤出属性匹配的用户
    const filteredUsers = targetGroup.users.filter(user => user[property] === value);
    matchedUsers = matchedUsers.concat(filteredUsers);
  });

  return matchedUsers;
}

测试验证

用你提供的用户数组测试一下效果:

const users= [{
 "name": "Joe", "companyId": "A2100", "type": "Admin" 
}, {
 "name": "Jane", "companyId": "A2100", "type": "Moderator" 
}, {
 "name": "Smith", "companyId": "A2100", "type": "User" 
}, {
 "name": "Smith", "companyId": "A2100", "type": "User" 
}, {
 "name": "Rocket", "companyId": "A3100", "type": "Admin" 
}, {
 "name": "Rick", "companyId": "A3100", "type": "User" 
}, {
 "name": "Tim", "companyId": "A4100", "type": "Admin" 
} ];

// 先获取分组列表
const groupedUsers = orchestrateUsers(users);
console.log(groupedUsers);

// 搜索示例:找类型为Admin且companyId是A2100的用户
const searchResult = searchUsers(groupedUsers, ["Admin"], "companyId", "A2100");
console.log(searchResult); 
// 输出:[{name: "Joe", companyId: "A2100", type: "Admin"}]

这样两个方法就都能正常工作了,分组逻辑符合要求,搜索也能精准返回匹配的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:29