简体   繁体   English

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

[英]How to filter an array using forEach() inside filter() - Javascript

I have an array of objects and I'd like to filter it based on another array.我有一个对象数组,我想根据另一个数组过滤它。 If filters object value is only one, I can use only filter , but if there are one more values in filters object, nothing show.如果filters object 的值只有一个,我只能使用filter ,但是如果filters object 中还有一个值,则什么也没有显示。 So use forEach inside the filter and wanted to return fit values.所以在过滤器中使用forEach并希望返回拟合值。 Could you please help me what the issue is?你能帮我看看是什么问题吗? Thanks谢谢

Expected result:预期结果:

[
    {
        "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);

Based on the semantics of the data you provided, you want to check if all filters are contained in tags :根据您提供的数据的语义,您要检查是否所有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);

Instead of .forEach , use .some而不是.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);


Issues with your code您的代码有问题

  1. Array.forEach does not return anything. Array.forEach不返回任何内容。 So your return does not break loop or return value.所以你的回报不会打破循环或返回值。
  2. Your Array.filter does not have return statement.您的Array.filter没有return语句。 Due to this, by default everything is falsy (return undefined) and hence empty array因此,默认情况下一切都是假的(返回未定义),因此是空数组

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

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