我有一个有两个列表的对象。
const list = {
Operator: [
{
Login: 'login1',
PermissionGroup: '2',
Sub: '3',
},
{
Login: 'login2',
PermissionGroup: '3',
Sub: '2',
},
],
PermissionGroups: [
{
PermissionGroupId: '2',
GroupsName: 'Gestor',
PermissionLevel: 2,
},
{
PermissionGroupId: '3',
GroupsName: 'Lider',
PermissionLevel: 3,
},
],
};在我的剩馀部分,我有操作符的“子”。那我该怎么做..。
步骤1:获取我的Redux "sub“并找到它在哪个操作符中
步骤2:现在我有了操作符,我需要找到哪个操作符对应于PermissionGroup,使用PermissioninGroup(into操作符)和PermissionGroupId(into PermissionGroups)
这个方法做我想要的(忽略最后的返回),我如何优化这个方法?我不想用两个过滤器
const search = (sub) => {
const usuario = listaUsuarios.filter((element) => element.Sub === sub)[0];
const permissaoUsuario = listaPermissoes.filter(
(element) => element.PermissionGroupId === usuario.PermissionGroup
)[0];
return permissaoUsuario.PermissionLevel;
};发布于 2022-03-16 01:32:03
就个人而言,当前的解决方案似乎还可以(当然,如果确认只需要.filter()的第0元素,则可能更倾向于使用.find() )。由于OP要求另一种解决方案,下面的解决方案(这不是我的建议)可能会达到预期的目标。
代码片段
const searchSub = (needle, {Operator, PermissionGroups}) => (
[...Operator, ...PermissionGroups].reduce(
(res, obj) => ({
...res,
...(
'Sub' in obj && obj.Sub === needle
? {foundSub: {...obj}}
: 'PermissionGroup' in res.foundSub &&
'PermissionGroupId' in obj &&
obj.PermissionGroupId === res.foundSub.PermissionGroup
? {matchedPermissionGroup: {...obj}}
: {}
)
}),
{foundSub: {}, matchedPermissionGroup: {}}
)
);
const list = {
'Operator': [{
'Login': 'login1',
'PermissionGroup': '2',
'Sub': '3',
},
{
'Login': 'login2',
'PermissionGroup': '3',
'Sub': '2',
}
],
'PermissionGroups': [{
'PermissionGroupId': '2',
'GroupsName': 'Gestor',
'PermissionLevel': 2,
},
{
'PermissionGroupId': '3',
'GroupsName': 'Lider',
'PermissionLevel': 3,
},
]
};
console.log(searchSub('2', list))
console.log(
'PermissionLevel: ',
searchSub('2', list)?.matchedPermissionGroup.PermissionLevel
);
解释
... spread操作符来构造一个数组,当发现<...>D17时,使用Operator和PermissionGroups数组.reduce()迭代该组合数组>H 116,跟踪<...>D18目标代码>H 219H 120当找到匹配的<代码>D21时,跟踪该数组,以及H 222H 123所得到的res对象将具有Operator和d26数组中匹配的元素。
注意事项
只是想重申一下,在这个上下文中只使用两个单独的.find()实际上更简单。https://stackoverflow.com/questions/71488033
复制相似问题