как отфильтровать массив объектов в js? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два массива объектов. Я хочу отфильтровать данные, основываясь на разрешении Obj.

Это исходит из базы данных. Вот массивы под-массивов в разрешении Obj.

   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"
            }]
        },
    ]

это данные c. Я хочу сравнить эти данные на основе разрешения.

    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"

                },

            ]
        },
    ];

Я пытаюсь отфильтровать массив PubSidebar объекта на основе массива PermissionObj объектов. вот мой пробный код.

 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, если он не соответствует объектам разрешений в исправлениях. В моем разрешении объектов, нет исправлений.

Я хочу отфильтровать pubsidebar по ключу и значению allowObj объектов. Это будет значение этого формата

    // 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"

                },

            ]
        },
    ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...