我有一个对象和groupKey的权限数组。我想在权限和groupKey之间进行过滤。如果对象的权限数组(属性为空数组[] )数组,则群键(项目、期刊)将被移除。例如,这里有文章和期刊是空的array[]。
let permission = [{
Book: [{
label: "Can View",
value: "can_view"
} ]
},
{
Test: [{
label: "Can View",
value: "can_view"
} ]
}, , {
Articles: []
} ,{
Journals: []
}
]
const groupKey = [
{label: "Book", value: "Book"},
{label: "Test", value: "test"},
{label: "Articles", value: "Articlefull"},
{label: "Journals", value: "Journal"},
]我接受的输出是
let groupKey = [
{label: "Book", value: "Book"},
{label: "Test", value: "test"},
]我正在使用过滤方法,但我没有找到解决办法。
发布于 2020-03-27 11:20:10
从Object.entries中取出项的key和value,使用value.length>0检查数组是否为空,然后检查是否存在与键匹配的标签,在array中推送项。
const permission = [
{
Book: [
{
label: "Can View",
value: "can_view"
}
]
},
{
Test: [
{
label: "Can View",
value: "can_view"
}
]
},
,
{
Articles: []
},
{
Journals: []
}
];
const groupKey = [
{ label: "Book", value: "Book" },
{ label: "Test", value: "test" },
{ label: "Articles", value: "Articlefull" },
{ label: "Journals", value: "Journal" }
];
let NewGrpKey = [];
permission.map(perm => {
let key = Object.entries(perm)[0][0];
let value = Object.entries(perm)[0][1];
value.length > 0 &&
NewGrpKey.push(
groupKey.find(GrpItem => {
return GrpItem.label === key;
})
);
});
console.log(NewGrpKey);
发布于 2020-03-27 12:10:24
您也可以通过使用filter和some数组原型来完成这一任务。
filter()方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。它返回一个布尔值。
let permission = [
{
Book: [
{
label: "Can View",
value: "can_view"
}
]
},
{
Test: [
{
label: "Can View",
value: "can_view"
}
]
},
{
Articles: []
},
{
Journals: []
}
];
const groupKey = [
{ label: "Book", value: "Book" },
{ label: "Test", value: "test" },
{ label: "Articles", value: "Articlefull" },
{ label: "Journals", value: "Journal" }
];
const res = groupKey.filter(value => (permission.some(ob => typeof ob[value.label] !== 'undefined' && ob[value.label].length > 0)));
console.log(res);.as-console-wrapper {
min-height: 100% !important;
}
发布于 2020-03-27 12:17:42
我们可以使用reduce方法迭代数组,并检查对象是否包含长度大于0的数组。然后将项目推入结果数组。此外,我们还可以使用地图集合来检查groupKey和O(1)。
const keys = new Map(groupKey.map(l => [l.label, l]));
const result = permission.reduce((a, c) => {
for (let key in c) {
if (keys.has(key) && c[key].length > 0) {
a.push(keys.get(key));
}
}
return a;
}, []);
console.log(result);举个例子:
let permission = [{
Book: [{ label: "Can View", value: "can_view"
}]
},
{
Test: [{ label: "Can View", value: "can_view"
}]
}, , {
Articles: []
}, {
Journals: []
}
]
const groupKey = [
{ label: "Book", value: "Book" },
{ label: "Test", value: "test" },
{ label: "Articles", value: "Articlefull" },
{ label: "Journals", value: "Journal" },
]
const keys = new Map(groupKey.map(l => [l.label, l]));
const result = permission.reduce((a, c) => {
for (let key in c) {
if (keys.has(key) && c[key].length > 0) {
a.push(keys.get(key));
}
}
return a;
}, []);
console.log(result);
https://stackoverflow.com/questions/60884567
复制相似问题