如何实现动态排序循环:将候选人按职位分类至对应数组
动态分类候选人到对应职位数组的优化方案
你的核心问题是硬编码了职位数组的索引判断,导致无法适配positionArr的动态变化(比如新增/删除职位)。下面是两种更简洁、动态的实现方式:
方案一:使用对象映射(推荐,可读性&效率更高)
先通过对象建立职位和对应候选人数组的映射,最后再转换成你需要的数组格式:
const positionArr = ["Chairman", "Secretary", "Organiser", "Finacial Secretary"]; const candidates = [ { name: "Kwesi", position: "Finacial Secretary" }, { name: "Kofi", position: "Chairman" }, { name: "Ama", position: "Secretary" }, { name: "Kwame", position: "Finacial Secretary" }, { name: "Juliet", position: "Organiser" }, { name: "Jese", position: "Chairman" }, ]; const sortCandidates = () => { // 初始化职位-候选人映射对象 const positionMap = positionArr.reduce((map, pos) => { map[pos] = []; return map; }, {}); // 遍历候选人,分类到对应职位数组 candidates.forEach(candidate => { if (positionMap.hasOwnProperty(candidate.position)) { positionMap[candidate.position].push(candidate); } }); // 转换成和原需求一致的数组格式(按positionArr顺序排列) const varPositions = positionArr.map(pos => positionMap[pos]); console.log(varPositions); }; sortCandidates();
方案二:利用数组索引动态匹配
直接基于positionArr的索引,动态找到候选人对应的子数组位置:
const positionArr = ["Chairman", "Secretary", "Organiser", "Finacial Secretary"]; const candidates = [ { name: "Kwesi", position: "Finacial Secretary" }, { name: "Kofi", position: "Chairman" }, { name: "Ama", position: "Secretary" }, { name: "Kwame", position: "Finacial Secretary" }, { name: "Juliet", position: "Organiser" }, { name: "Jese", position: "Chairman" }, ]; const sortCandidates = () => { // 初始化对应职位的空数组 const varPositions = positionArr.map(() => []); // 遍历候选人,找到对应职位的索引并添加 candidates.forEach(candidate => { const posIndex = positionArr.indexOf(candidate.position); if (posIndex !== -1) { // 确保职位存在于positionArr中 varPositions[posIndex].push(candidate); } }); console.log(varPositions); }; sortCandidates();
关键优化点:
- 去掉了硬编码的索引判断,完全基于
positionArr的内容动态处理,新增/删除职位无需修改代码 - 减少了嵌套遍历,提升了代码效率
- 增加了职位存在性判断,避免无效操作
内容的提问来源于stack exchange,提问作者RaqDeku
相关产品推荐
相关产品推荐

