Javascript 使用过滤器过滤对象
我有如下对象数组:Javascript 使用过滤器过滤对象,javascript,arrays,filter,ecmascript-6,Javascript,Arrays,Filter,Ecmascript 6,我有如下对象数组: pages= [ { "id":1, "name":"name1", "languages":[ { "id":1, "lang":"en" }, { "id":2, "lang":"de" } ] }, { "id":2,
pages= [
{
"id":1,
"name":"name1",
"languages":[
{
"id":1,
"lang":"en"
},
{
"id":2,
"lang":"de"
}
]
},
{
"id":2,
"name":"name2",
"languages":[
{
"id":1,
"lang":"en"
},
{
"id":2,
"lang":"de"
}
]
},
{
"id":3,
"name":"name3",
"languages":[
{
"id":1,
"lang":"en"
}
]
}
]
语言数组(将通过单击复选框进行设置)如下所示:
selectedLanguages=['en'];
现在,我想根据selectedLanguages
值过滤主数组。我已尝试使用以下代码:
pages.filter(page => {
var present = false;
page.languages.map(l => {
if(selectedLanguages.includes(l.lang)) {
present = true;
}
});
if(present) {
return page;
}
})
所需输出:如果selectedLanguages=['en']
则为页面中的所有项目,如果de
则为前两个元素
它是有效的,但我很好奇我是否能做得更好
任何建议都会很有帮助:)谢谢。您可以使用和的组合:
let pages=[
{
“id”:1,
“名称”:“名称1”,
“语言”:[
{
“id”:1,
“郎”:“恩”
},
{
“id”:2,
“郎”:“德”
}
]
},
{
“id”:2,
“名称”:“名称2”,
“语言”:[
{
“id”:1,
“郎”:“恩”
},
{
“id”:2,
“lang”:“fr”
}
]
}
]
让selectedLanguages=['fr'];
让result=pages.filter(e=>e.languages.find(l=>selectedLanguages.includes(l.lang));
控制台日志(结果)
与其尝试使用.map
创建中间数组,不如简单地检查某些语言
是否包含与所选语言
匹配的语言
:
constpages=[{“id”:1,“name”:“name1”,“languages”:[{“id”:1,“lang”:“en”},{“id”:2,“lang”:“de”},{“id”:2,“name”:“name2”,“languages”:[{“id”:1,“lang”:“en”},{“id”:2,“lang”:“de”}]
const selectedLanguages=['en'];
console.log(
pages.filter(({languages})=>(
languages.some({lang})=>selectedLanguages.includes(lang))
))
)
您可以使用filter()
和indexOf()
检查所选语言的数组:
var页面=[
{
“id”:1,
“名称”:“名称1”,
“语言”:[
{
“id”:1,
“郎”:“恩”
},
{
“id”:2,
“郎”:“德”
}
]
},
{
“id”:2,
“名称”:“名称2”,
“语言”:[
{
“id”:1,
“郎”:“恩”
},
{
“id”:2,
“郎”:“德”
}
]
},
{
“id”:3,
“名称”:“名称3”,
“语言”:[
{
“id”:5,
“郎”:“我们”
},
{
“id”:6,
“郎”:“德”
}
]
}
];
var selectedLanguages=['en'];
var res=pages.filter((页面)=>{
var languageFound=page.languages.find(language=>selectedLanguages.indexOf(language.lang)!=-1);
如果(找到语言){
返回页面;
}
});
控制台日志(res)代码>请加上想要的结果。我想这就是你所说的,因为你的例子已经对我有用了。。。只需将页面的输出分配给另一个变量就可以了。filter(…)
我已经提到过它是有效的:)我希望它是更好或更紧凑的解决方案。