首页 > 解决方案 > 如何过滤js中的对象数组?

问题描述

我有两个对象数组。我想根据permissionObj 过滤数据。

这是来自数据库。这是permissionObj 中的子数组数组。

   let permissionObj = [{
            "OA deal": [{
                    label: "can view",
                    value: "can_view"
                }, {
                    label: "can create",
                    value: "can_create"
                },
                {
                    label: "can edit",
                    value: "can_edit"
                }, {
                    label: "can delete",
                    value: "can_delete"
                }
            ]
        },
        {
            "Deposit": [{
                    label: "can view",
                    value: "can_view"
                }, {
                    label: "can create",
                    value: "can_create"
                },
                {
                    label: "can edit",
                    value: "can_edit"
                }, {
                    label: "can delete",
                    value: "can_delete"
                }
            ]
        },

        {
            "Journals": [{
                label: "can view",
                value: "can_view"
            }, {
                label: "can create",
                value: "can_create"
            }, {
                label: "can edit",
                value: "can_edit"
            }, {
                label: "can delete",
                value: "can_delete"
            }]
        },
        {
            "Deposit": [{
                label: "can view",
                value: "can_view"
            }, {
                label: "can create",
                value: "can_create"
            }, {
                label: "can edit",
                value: "can_edit"
            }, {
                label: "can delete",
                value: "can_delete"
            }]
        },


        {
            "OA deals request": []
        },
        {
            "Deposit Approval": []
        },
        {
            "Dashboard": [{
                label: "can view",
                value: "can_view"
            }, {
                label: "can create",
                value: "can_create"
            }, {
                label: "can edit",
                value: "can_edit"
            }, {
                label: "can delete",
                value: "can_delete"
            }]
        },
    ]

这是静态数据。我想根据许可比较这些数据。

    console.log(permission)
    const PubSidebar = [{
            label: "Dashboard",
            key: "Dashboard",
            value: "can_view"
        }, {
            label: "Settings",
            key: "Settings",
            value: "can_view"
        },
        {
            label: "OA deal activities",
            key:"OA Deal" || "Deposit"|| "Corrections" ,
            content: [{
                    label: "Add oadeal",

                    key: "OA deal",
                    value: "can_create"
                },

                {
                    label: "edit oadeal ",

                    key: "OA deal",
                    value: "can_edit"
                },

                {

                    label: "view oadeal ",
                    key: "OA deal",
                    value: "can_view"

                },

                {
                    label: "Deposit for view",
                    key: "Deposit",
                    value: "can_view"
                },
                {
                    label: "Deposit for edit",
                    key: "Deposit",
                    value: "can_edit"

                },
                {
                    key: "Deposit",
                    value: "can_edit"

                },
                {
                    label: "edit Corrections",
                    key: "Corrections",
                    value: "can_edit"

                },
                {
                    label: "Add Corrections",
                    key: "Corrections",
                    value: "can_create"

                },

                {
                    label: "view Corrections",
                    key: "Corrections",
                    value: "can_view"

                }
            ]
        },
        { key:"Journals"
            label: "Journal for publishers",
            content: [{
                    label: "Add Journal",
                    key: "Journals",
                    value: "can_create"
                },
                {
                    label: "Journals List",
                    key: "Journals",
                    value: "can_view"

                },

            ]
        },
    ];

我正在尝试根据对象的 permissionObj 数组过滤对象的 PubSidebar 数组。这是我的尝试代码。

 let permission =
      permissionObj.filter(
        x => Object.values(x)[0].length !== 0
      );

    const result =
      PubSidebar &&
      PubSidebar.reduce((accumulator, currentvalue) => {
        let filterObj = permission && permission.find(f => f[currentvalue.key]);
        // console.log("filterObj", filterObj);
        if (filterObj) {
          if (currentvalue.value) {
            accumulator.push(currentvalue);
          }
          if (currentvalue.content) {
            console.log(currentvalue);
            currentvalue.content =
              currentvalue &&
              currentvalue.content &&
              currentvalue.content.filter(
                f =>
                  filterObj[currentvalue.key] &&
                  filterObj[currentvalue.key].some(
                    s =>
                      s.value &&
                      s.value.toLowerCase() &&
                      s.value === f.value.toLowerCase()
                  )
              );
            accumulator.push(currentvalue);
          }
        }
        return accumulator;
      }, []);

这是我的问题,我遇到的问题是我不想得到can_edit,can_delete,如果它与更正中的权限对象不匹配。在我的许可对象中,没有更正。

我想根据 permissionObj 对象的键和值过滤 pubsidebar。这将是这个格式值

    // My Accepted Output would be :


    const output = [{
            label: "Dashboard",
            key: "Dashboard",
            value: "can_view"
        },
        {   key:"OA Deal" || "Deposit",
            label: "OA deal activities",
            content: [{
                    label: "Add oadeal",
                    key: "OA deal",
                    value: "can_create"
                },

                {
                    label: "edit oadeal ",
                    key: "OA deal",
                    value: "can_edit"
                },

                {
                    label: "view oadeal ",
                    key: "OA deal",
                    value: "can_view"

                },

                {
                    label: "Deposit for view",
                    key: "Deposit",
                    value: "can_view"
                },
                {
                    label: "Deposit for edit",
                    key: "Deposit",
                    value: "can_edit"

                },
                {
                    key: "Deposit",
                    value: "can_edit"

                },


            ]
        },
        { key:"Journals"
            label: "Journal for publishers",
            content: [{
                    label: "Add Journal",
                    key: "Journals",
                    value: "can_create"
                },
                {
                    label: "Journals List",
                    key: "Journals",
                    value: "can_view"

                },

            ]
        },
    ];

标签: javascriptarraysreactjsobjectfunctional-programming

解决方案


推荐阅读