javascript - 如何过滤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"
},
]
},
];
解决方案
推荐阅读
- tensorflow - Tensorflow:sess.run 返回相同的输出标签
- java - handler.postdelayed 不工作
- spring - 为什么在 Spring Integration 中将 ID 和 TIMESTAMP 声明为瞬态标头?
- java - 我应该如何在第一行使用包声明和 import Scanner 语句?因为两者都应该在第一行代码中声明
- reactjs - 如何为整个应用程序制作单个加载器减速器,React
- swift - 如何在 Swift 中修复“线程 1:致命错误:在展开可选值时意外发现 nil”
- javascript - 从 Table Cheerio 获取文本
- java - GDPR SDK 错误 [Android 工作室]
- regex - Word 的正则表达式之前没有一些特定的单词
- r - Ubuntu 18.04 上 RcppNumerical 和 RcppEigen 中的警告