修改包含两个对象数组的数组

Modifying a array with two array of objects

提问人:Almar Ogsila 提问时间:11/13/2023 最后编辑:Almar Ogsila 更新时间:11/13/2023 访问量:68

问:

我有两个不同的对象数组。一个数组表示所有系统模块,而另一个数组显示用户可以访问的模块。

这是我目前得到的完整回应 - 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
        ]
      }
    }
 }

有人可以帮助我实现这一目标吗?提前致谢!

JavaScript 节点 .js 数组 JSON 打字稿

评论

1赞 Hao Wu 11/13/2023
这是一个语法错误:。你的意思是?[ "create" : 0 ]{ "create" : 0 }
1赞 Nick 11/13/2023
您期望的结构无效;你有一个带有关联键的数组。
0赞 Almar Ogsila 11/13/2023
@HaoWu我更新了问题!
0赞 Orifjon 11/13/2023
我想,你换错了部分。

答:

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
非常感谢您的帮助。它现在正在工作。