React中如何将登录用户置于按字母排序的用户数组首位?
解决方案
你可以通过调整排序逻辑,让当前登录用户优先排在数组首位,其余用户保持原有字母排序。另外要注意sort方法会原地修改原数组,所以先拷贝一份数组再处理,避免产生副作用。
修改后的代码如下:
const getSortedFullNames = ( ownerUsers: GetUsersRes, ownerUserNames: { [ownedBy: string]: string }, userSettings?: UserSettings ): OwnerName[] => { if (!userSettings) return []; // 从userSettings中获取当前登录用户的ID,注意匹配你项目中的实际字段名 const currentUserId = userSettings.userId; // 浅拷贝原数组,避免sort修改原数组 const sortedArray = [...ownerUsers].sort((a, b) => { // 优先让当前登录用户排到最前面 if (a.id === currentUserId) return -1; if (b.id === currentUserId) return 1; // 其余用户仍按lastName字母顺序排序 return a.lastName.localeCompare(b.lastName); }); return sortedArray.map(owner => ({ userId: owner.id, name: ownerUserNames[owner.id], } as OwnerName)); };
关键说明:
- 避免修改原数组:使用
[...ownerUsers]浅拷贝原数组,再对拷贝后的数组排序,防止影响原数据的其他使用场景。 - 优先排序登录用户:在排序函数中,先判断当前项是否为登录用户,让登录用户的排序优先级最高(返回
-1表示排在前面)。 - 适配实际字段:如果
userSettings中存储当前用户ID的字段不是userId,请替换为你项目中的实际字段(比如userSettings.currentUser.id)。
内容的提问来源于stack exchange,提问作者vana
相关产品推荐
相关产品推荐

