У меня есть два массива объектов. Я хочу отфильтровать данные, основываясь на разрешении 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"
},
]
},
];