javascript - 如何将对象数组过滤到js中的另一个对象数组?
问题描述
我有两个对象数组。我想根据permissionObj 过滤数据。
这是来自数据库。这是permissionObj 中的子数组数组。
我需要在 reduce 函数中做另一个条件。例如,如果 Pubsidebar 的值是令牌是公共的,我想保留静态内容 {label: "test",value: "public"} 而不用permissionObj 过滤,如果其他键和值与permissionObj 匹配,那么它将被推送里面的令牌。
let permissionObj = [
{
'OA deal': [
{
label: 'can view',
value: 'can_view',
},
],
},
{
Deposit: [
{
label: 'can edit',
value: 'can_edit',
},
],
},
{
Deposit: [
{
label: 'can_view',
value: 'can_view',
},
],
},
{
Journals: [
{
label: 'can create',
value: 'can_create',
},
],
},
{
Dashboard: [
{
label: 'can view',
value: 'can_view',
},
],
},
{
token: [
{
label: 'can view',
value: 'can_create',
},
],
},
]
const PubSidebar = [
{
label: 'Dashboard',
value: 'can_view',
},
{
label: 'token',
value: 'public',
content: [
{
key: 'token',
value: 'can_create',
},
{
key: 'test',
value: 'public',
},
],
},
{
label: 'OA deal',
content: [
{
label: 'view oadeal',
key: 'OA deal',
value: 'can_view',
},
{
label: 'Deposit',
key: 'Deposit',
value: 'can_view',
},
{
label: 'Corrections',
key: 'Corrections',
value: 'can_edit',
},
],
},
{
label: 'Journals',
content: [
{
label: 'Add Journal',
key: 'Journals',
value: 'can_create',
},
],
},
]
const filterObject = permissionObj.reduce((a, c) => {
for (const key in c) {
a[key] = c[key]
}
return a
}, {})
const result = PubSidebar.reduce((a, c) => {
if (
filterObject[c.label] &&
c.value &&
filterObject[c.label].some(s => s.value === c.value)
) {
a.push(c)
} else if (c.value === 'public' && c.label === 'token') {
if (
(c.content = c.content.filter(
f =>
filterObject[f.key] &&
filterObject[f.key].some(s => s.value == f.value)
))
) {
c.content = c.content.filter(
f =>
filterObject[f.key] &&
filterObject[f.key].some(s => s.value == f.value)
)
a.push(c)
}
} else if (c.content.some(s => filterObject[s.key]) && c.content) {
c.content = c.content.filter(
f =>
filterObject[f.key] && filterObject[f.key].some(s => s.value == f.value)
)
a.push(c)
}
return a
}, [])
console.log(result)
这是代码片段。我正在尝试从侧边栏获取公共数据而不使用permissionObj 进行过滤。
my expected output would :
[
{
"label": "Dashboard",
"value": "can_view"
},
{
"label": "token",
"value": "public",
"content": [{
"key": "test",
"value": "public"
}
{
"key": "token",
"value": "can_create"
}
]
},
{
"label": "OA deal",
"content": [
{
"label": "view oadeal",
"key": "OA deal",
"value": "can_view"
},
{
"label": "Deposit",
"key": "Deposit",
"value": "can_view"
}
]
},
{
"label": "Journals",
"content": [
{
"label": "Add Journal",
"key": "Journals",
"value": "can_create"
}
]
}
]
解决方案
推荐阅读
- java - 给定 SuperString 是否可以使用给定子字符串的任意组合
- javascript - 为什么我在 angularjs 中得到放大的图像?
- dax - 使用过滤器计算但忽略现有过滤器
- html - 如何滚动到顶部并加载 iframe
- java - 如何在 qaf applicaiton.properties 中给 FirefoxDrive 和 gecko 驱动程序在 Firefox 中执行
- java - 在 Android Studio 中下载文件需要很长时间
- reactjs - 无法获取 /*url*
- wordpress - 将 WordPress 站点迁移到另一个站点后的 ERR_SSL_PROTOCOL_ERROR - 尝试创建临时环境
- android - RecyclerView 更新
- java - 使用样式设置背景