繁体   English   中英

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

[英]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);


您的代码有问题

  1. Array.forEach不返回任何内容。 所以你的回报不会打破循环或返回值。
  2. 您的Array.filter没有return语句。 因此,默认情况下一切都是假的(返回未定义),因此是空数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM