大家好,我是JavaScript的新手,我有一个嵌套的对象数组,我的目的是过滤掉其角色数组由诸如“ _admin”''之类的值组成的对象。 我的数据看起来像这样
[
{
name:'tom',
process:'flipkart',
master:'pharma',
profiles: [
{
level:'begginer',
language:'hindi',
role:['flp_admin','flp_teacher']
}
]
},
{
name:'jeo',
process:'amazon',
master:'science',
profiles: [
{
level:'begginer',
language:'english',
role:['amz_admin']
}
]
},
{
name:'jerry',
process:'email',
master:'it',
profiles: [
{
level:'begginer',
language:'urdu',
role:['eml_teacher']
}
]
}
]
任何人都可以告诉我如何过滤对象
答案 0 :(得分:2)
const data = [
{
name: "tom",
process: "flipkart",
master: "pharma",
profiles: [
{
level: "begginer",
language: "hindi",
role: ["flp_admin", "flp_teacher"]
}
]
},
{
name: "jeo",
process: "amazon",
master: "science",
profiles: [
{
level: "begginer",
language: "english",
role: ["amz_admin"]
}
]
},
{
name: "jerry",
process: "email",
master: "it",
profiles: [
{
level: "begginer",
language: "urdu",
role: ["eml_teacher"]
}
]
}
];
const filterData = data.filter(({ profiles }) => {
return profiles.filter(({ role }) => {
return role.some(str => str.includes('_admin'))
}).length
})
console.log(filterData)
答案 1 :(得分:1)
如果您不想使用任何库(例如lodash),这可能是一种方法:
myArray.filter(item => item.profiles.some(p => /_admin/i.test(p.role)))
它将返回一个包含名称分别为“ tom”和“ jeo”的对象的数组。
item.profiles.some(p => /_admin/i.test(p.role))指示是否存在一个对象(项目)包含“ _admin”的配置文件。
myArray.filter将与以前的.some条件匹配的所有对象(项目)恢复为真。
答案 2 :(得分:1)
这是您的一线客,
data.filter(item => item.profiles.some((profile)=> profile.role.some((roleItem) => roleItem.includes('_admin'))))
data
是您的数组。
让我为您分手吧
data.filter((item) => {
const itemHasRoleAdmin = item.profiles.some((profile) => {
const profileHasRoleAdmin = profile.role.some((roleItem) => {
if(roleItem.includes('_admin')) return true;
else return false;
});
if(profileHasRoleAdmin) return true;
else return false
});
if(itemHasRoleAdmin) return true;
else return false;
});
有关Array.prototype.some
method和Array.prototype.filter
method的更多信息。
答案 3 :(得分:0)
这是使用object-scan的另一种解决方案。一旦掌握了使用方法,它就会很强大。我非常喜欢使用库,因为它们可以使代码更具可读性且更易于维护(例如,针对变更的需求)
conda list