javascript - 如何在javascript中将对象数组过滤为另一个对象数组?
问题描述
我有两个对象数组。我想根据 PermissionObj 过滤数据。
这是来自数据库。这是 permissionObj 中的子数组数组。
const PermissionObj = {
permission: [{
"books": [{
"label": "Can View",
"value": "can_view"
}]
},
{
"Journals": [{
"label": "Can View",
"value": "can_view"
},
{
"label": "Can Create",
"value": "can_create"
},
]
},
{
"deal": [{
"label": "Can update",
"value": "can_update"
},
{
"label": "Can delete",
"value": "can_delete"
},
]
}
]
}
这是静态数据。我想根据 PermissionObj 比较这些数据。
const data = [{
label: "books",
value: "can_view"
},
{
label: "deal",
content: [{
value: "can_update"
}, {
value: "can_delete"
},{value:"can_view"}]
},
{
label: "Articles",
},
{
label: "Journals",
content: [{
value: "can_create"
},
{
value: "can_view"
},
{
value: "can_delete"
},
{
value: "can_edit"
},
]
}
]
我正在尝试基于PermissionObj对象数组过滤对象数据数组。这是我的尝试代码。
let permission = PermissionObj.permission
permission.filter(item=>{
// I am finding data label by using permission label.
let dataItem = data.find(index=>item[index.label])
console.log(dataItem)
})
// the problem is that I want to filtering based on value .
// if both of value is true , then show the data .
如果 PermissionObj 值将与数据值匹配。然后显示数据。
我接受的输出将是这种格式:
const data = [{
label: "books",
value: "can_view"
},
{
label: "deal",
content: [{
value: "can_update"
}, {
value: "can_delete"
}]
},
{
label: "Journals",
content: [{
value: "can_create"
},
{
value: "can_view"
},
]
}
]
解决方案
所以你可以得到keys
数组permission
,这会给你一个键数组。因为你keys
在一个对象数组中得到一个项目,所以它key
总是第一个项目,那么你可以用那个键检查每个数据项
const PermissionObj = {
permission: [
{
books: [
{
label: "Can View",
value: "can_view"
}
]
},
{
Journals: [
{
label: "Can View",
value: "can_view"
},
{
label: "Can Create",
value: "can_create"
}
]
},
{
deal: [
{
label: "Can update",
value: "can_update"
},
{
label: "Can delete",
value: "can_delete"
}
]
}
]
};
const data = [
{
label: "books",
value: "can_view"
},
{
label: "deal",
content: [
{
value: "can_update"
},
{
value: "can_delete"
}
]
},
{
label: "Articles"
},
{
label: "Journals",
content: [
{
value: "can_create"
},
{
value: "can_view"
}
]
}
];
let permission = PermissionObj.permission;
let NewData = [];
permission.filter(item => {
let ObjectKeys = Object.keys(item);
let ObjKey = ObjectKeys[0];
let DATA = data.find(
dataItem => dataItem.label.toString() === ObjKey.toString()
);
NewData.push(DATA);
});
console.log(NewData);
推荐阅读
- mongodb - mongodb 聚合> $group max 文档中的主数组
- javascript - 在页面加载时关注 Div 文本框(移动浏览器)
- python - 如何在 python 的 market_profile 包中按日期分组?
- jupyter-notebook - 在基于 rst 的文档中嵌入执行的 Jupyter 笔记本
- angular - 在每次放置角度拖放后添加箭头图标
- flutter - Flutter 未来显示数组或流生成器
- dapr - 开放应用程序模型 (OAM) 与分布式应用程序运行时 (Dapr)
- mongodb - 在 mongoose 中使用位置运算符 ($) 进行更新
- node.js - 从节点js中的远程流读取时写入远程流
- c# - 从需要 VPN 的 azure 访问站点