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
相关产品推荐
相关产品推荐

