2 回答
TA贡献1839条经验 获得超15个赞
你能试试这个吗?
let order = ['ADMIN', 'MODERATOR', 'MEMBER'];
order.forEach(function(orderItem) {
users.forEach(function(value, key, map) {
if (orderItem === value.pawn) {
userlistHTML += '<li><div class="userlist_pawn'+ value.pawn +'"></div><divclass="userlist_name">' + value.name + '</div></li>';
}
})
})
TA贡献1802条经验 获得超10个赞
这就是我所指的 - 获取用户列表/按角色对其进行排序/迭代以获取字符串/用字符串替换innerHTML。
请注意,我使用对象文字来确定用户角色的相对顺序- 因为所需的结果不是直接按字母顺序排列的。这用于通过引用相关用户角色的值来确定用户的排序顺序(而不是简单地按字母顺序对数组进行排序)。
也不是用于排序的一个衬里 - 这可以分成一个单独的命名函数,因为另一个函数需要它(并且排序顺序也可以修改,以便它对不同的用户显示不同的内容。
我还使用了 li 上的类 - 并用它来给出分组之间的间距。
const users = [
{name: 'Arthur' , role: "Member"},
{name: 'Susan' , role: "Moderator"},
{name: 'Bob' , role: "Admin"},
{name: 'Sylvia' , role: "Member"},
{name: 'Gavin' , role: "Moderator"},
{name: 'Stuart' , role: "Admin"}
]
const roleOrder = {
Admin: 1,
Moderator: 2,
Member: 3
};
function Userlist(users) {
const id = "#userlist";
let userlistHTML ='';
const sortedUsers = users.sort(function(a, b){ return roleOrder[a.role] == roleOrder[b.role] ? 0 : +(roleOrder[a.role] > roleOrder[b.role]) || -1;});
sortedUsers.forEach(function(user) {
userlistHTML += '<li class="userlist_pawn'+ user.role +'"><span class="userlist_name">' + user.name + ' (' + user.role + ')</span></li>';
});
$(id).html(userlistHTML);
}
Userlist(users);
// gives the list in the order of admin > moderator > member
// Bob (admin)
// Stuart (admin)
// Susan (moderator)
// Gavin (moderator)
// Arthur (member)
// Sylvia (member)
ul {
list-style: none;
padding-left: 0;
}
.userlist_pawnAdmin {
color: red;
}
.userlist_pawnModerator {
color: blue;
}
.userlist_pawnMember {
color: green;
}
.userlist_pawnAdmin + .userlist_pawnModerator,
.userlist_pawnModerator + .userlist_pawnMember {
margin-top: 16px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id = "userlist"></ul>
- 2 回答
- 0 关注
- 84 浏览
添加回答
举报