我正在尝试比较2个对象数组,并检查1个数组是否具有与另一个数组相同的id
和role
所有元素。数组如下所示:
const allUsers = [
{ id: 1, roleId: 123, username: 'User1', roles:['admin'] }
{ id: 2, roleId: 123, username: 'User2', roles:['admin'] }
{ id: 3, roleId: 123, username: 'User3', roles:['admin'] }
{ id: 4, roleId: 123, username: 'User4', roles:['admin'] }
{ id: 5, roleId: 233, username: 'User5', roles:['admin'] }
]
// first example - here I have to return false
const selectedUsers = [
{ id: 1, roleId: 123, username: 'User1', roles:['admin'] }
{ id: 2, roleId: 123, username: 'User2', roles:['admin'] }
{ id: 5, roleId: 233, username: 'User5', roles:['admin'] }
]
// 2nd example - here I can return true
const selectedUsers = [
{ id: 1, roleId: 123, username: 'User1', roles:['admin'] }
{ id: 2, roleId: 123, username: 'User2', roles:['admin'] }
]
我需要执行以下操作-在selectedUsers
中,我已经选择了roleId: 233
和roles:['admin']
的所有用户,因此我需要将一些标志设置为false。如果我没有该用户,如果我只有{1/2}的用户roleId: 123
,则可以删除它们,因为有更多具有相同RoleId和roles: ['admin']
的用户。
我需要以某种方式比较这些数组,并检查是否尝试删除所有具有相同roleId
和role
的用户。
关于什么是最简单的解决方案的任何提示?
编辑:正如我在评论中所写,我正在尝试检查是否可以删除selectedUsers
,但是只有在至少有1个具有相同roleId和'admin的不同用户的情况下,我才能这样做在allUsers
数组中
答案 0 :(得分:1)
您可以在函数中返回它:
return selectedUsers.every(u =>
allUsers.filter(a =>
a.roleId === u.roleId && a.roles.join('') === u.roles.join(''))
.length > 1);
every()
确保每个selectedUser
都满足条件filter()
中测试该条件,以确保您需要至少有2个相似的用户,且他们与被检查的用户具有相同的roleId
和roles
。请注意,它是2而不是1,因为allUsers
当前还包括被检查的用户,在您从此函数返回true
后,该用户可能会被删除。join()
技巧对两个roles
数组(不能仅检查u.roles == a.roles
)进行简单的深度相等比较,前提是角色应该以一致的方式列出顺序(如果有多个角色)。