如何按items顺序排序members列表,遍历匹配对应项生成新列表调用setMembers
原有代码问题
- 存在语法错误:
.slice(items)缺少调用slice方法的源数组,且slice方法接收的参数是起止索引,不能直接传入items数组 - 排序逻辑不匹配需求:当前逻辑是按member的id字典序升序排列,无法实现和items的顺序完全对齐
正确实现
基础版本(适合数据量较小的场景)
逻辑完全匹配你要求的「遍历items逐项匹配member生成新列表」:
function sortMemberList(items) { // 假设items中存储的是和member dataset.id一一对应的id值 const sortedMembers = items.map(itemId => { // 这里的members为你原始的member数组,根据实际作用域调整引用 return members.find(member => member.dataset.id === itemId); }).filter(Boolean); // 过滤找不到匹配的无效项,不需要可删除 setMembers(sortedMembers); }
如果items是对象数组,每个item对应id的字段为item.id,把匹配条件改为member.dataset.id === item.id即可。
优化版本(适合members数据量较大的场景)
提前构建id到member的映射索引,避免每次查找都遍历整个members数组:
function sortMemberList(items) { const memberMap = new Map(members.map(member => [member.dataset.id, member])); const sortedMembers = items.map(itemId => memberMap.get(itemId)).filter(Boolean); setMembers(sortedMembers); }
内容的提问来源于stack exchange,提问作者nea
相关产品推荐
相关产品推荐

