gpt4 book ai didi

javascript - 使用过滤器过滤对象

转载 作者:行者123 更新时间:2023-11-30 14:30:47 24 4
gpt4 key购买 nike

我有如下对象数组:

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'] 那么 pages 中的所有项目,如果 de 那么前 2 个元素。

它可以工作,但我很好奇是否可以让它变得更好?

任何建议都会有所帮助 :) 谢谢。

最佳答案

您可以使用 Array#Filter 的组合, Array#findArray#includes为此:

let 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":"fr"
}
]
}
]

let selectedLanguages=['fr'];

let result = pages.filter(e => e.languages.find(l => selectedLanguages.includes(l.lang)));
console.log(result);

关于javascript - 使用过滤器过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51205596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com