![](/img/trans.png)
[英]Javascript how to filter an array using forEach() inside filter()
[英]How to filter an array using forEach() inside filter() - Javascript
我有一个对象数组,我想根据另一个数组过滤它。 如果filters
object 的值只有一个,我只能使用filter
,但是如果filters
object 中还有一个值,则什么也没有显示。 所以在过滤器中使用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);
根据您提供的数据的语义,您要检查是否所有filters
都包含在tags
中:
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);
而不是.forEach
,使用.some
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);
您的代码有问题
Array.forEach
不返回任何内容。 所以你的回报不会打破循环或返回值。Array.filter
没有return
语句。 因此,默认情况下一切都是假的(返回未定义),因此是空数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.