提问人:Almar Ogsila 提问时间:11/13/2023 最后编辑:Almar Ogsila 更新时间:11/13/2023 访问量:68
修改包含两个对象数组的数组
Modifying a array with two array of objects
问:
我有两个不同的对象数组。一个数组表示所有系统模块,而另一个数组显示用户可以访问的模块。
这是我目前得到的完整回应 - https://codebeautify.org/alleditor/y233ab057
{
"modules": {
"member": {
"actions": [
"create",
"edit"
]
},
"subscription": {
"actions": [
"create",
"edit",
"move_out",
"renew",
"void"
]
}
}
}
{
"user_modules": {
"subscription": {
"actions": [
"create",
"edit"
]
}
}
}
我想比较两个数组,如果user_modules具有与模块相同的操作,我想在像这样创建:1 的操作前面返回 1,否则需要返回 0,如下所示 void: 0 在user_modules数组中不会像模块数组那样包含所有详细信息。所以基于上面两个模块,我需要返回这样的东西,
{
"modules": {
"member": {
"actions": [
"create" : 0,
"edit" : 0
]
},
"subscription": {
"actions": [
"create" : 1,
"edit" : 1,
"move_out" : 0,
"renew" : 0,
"void" : 0
]
}
}
}
有人可以帮助我实现这一目标吗?提前致谢!
答:
1赞
Hao Wu
11/13/2023
#1
如果你打算将键值对作为对象,这里有一个使用数组函数的解决方案:actions
const modules = {
"member": {
"actions": [
"create"
]
},
"subscription": {
"actions": [
"create",
"edit",
"move_out",
"renew",
"void"
]
}
};
const user_modules = {
"subscription": {
"actions": [
"create",
"edit"
]
}
};
const output = Object.fromEntries(Object.entries(modules).map(([key, value]) => [key, {
...value,
actions: Object.fromEntries(value.actions.map(action => [
action, user_modules[key]?.actions?.includes(action) ? 1 : 0
]))
}]));
console.log(output);
评论
0赞
Almar Ogsila
11/13/2023
感谢您的回答,但我收到“modules.map is not a function”错误。你可以在这里找到我的原始输出 - codebeautify.org/alleditor/y233ab057
1赞
Hao Wu
11/13/2023
我已经根据您的输入更新了答案,请查看最新版本
0赞
Almar Ogsila
11/13/2023
非常感谢您的帮助。它现在正在工作。
评论
[ "create" : 0 ]
{ "create" : 0 }