如何在filter()-Javascript中使用forEach()过滤数组



我有一个对象数组,我想根据另一个数组对其进行筛选。如果filters对象值只有一个,我只能使用filter,但如果filters对象中有一个以上的值,则不会显示任何内容。因此,在过滤器中使用forEach,并希望返回拟合值。你能帮我解决一下问题吗?感谢

预期结果:

[
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
}
]

const data = [
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts'] 
const result = data.filter((v) => {
filters.forEach((tag) => {
if(!v.tags.includes(`madewithout__${tag}`))
return;
});
});
console.log(result);

根据您提供的数据的语义,您需要检查tags:中是否包含所有filters

const result = data.filter((v) => 
filters.every((tag) => v.tags.includes(`madewithout__${tag}`))
)

const data = [
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts'] 
const result = data.filter((v) => 
filters.every((tag) => v.tags.includes(`madewithout__${tag}`))
)
console.log(result);

使用.some而不是.forEach

const result = data.filter((v) => {
return !filters.some((tag) => !v.tags.includes(`madewithout__${tag}`))
});

const data = [{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts']
const result = data.filter((v) => {
return !filters.some((tag) => !v.tags.includes(`madewithout__${tag}`))
});
console.log(result);


代码问题

  1. Array.forEach不返回任何内容。所以您的返回不会破坏循环或返回值
  2. 您的Array.filter没有return语句。因此,默认情况下,所有内容都是falsy(返回undefined(,因此数组为空

最新更新