首页 > 解决方案 > 具有多个参数或关键字的 JavaScript Filter() 函数

问题描述

我有一个产品列表对象,我创建了一个数组来应用过滤函数从该数组中获取参数。像下面

var selectedProducts = ['music', 'dance']
var products = [
    {
        ID : 1,
        name : "pro1",
        category : "music"
    },
    {
        ID : 2,
        name : "pro2",
        category : "yoga"
    },
    {
        ID : 3,
        name : "pro3",
        category : "music"
    },
    {
        ID : 4,
        name : "pro4",
        category : "dance"
    },
]

function filterFunction(){
    return products.filter((abc) => {
        selectedProducts.forEach(function(item, index){
            return abc.category == selectedProducts[index]
        });
    });
}

我要做的是当用户选择任何复选框时,选定的值将存储在 selectedProducts[] 数组中,然后在这些值上调用过滤器函数,并将数组作为参数传递给 forEach 方法。代码在循环的每次迭代中都可以正常工作,但最后它会返回一个空的对象数组。我的代码有什么问题吗?

标签: javascript

解决方案


true从循环的回调函数返回forEach()不会对过滤条件产生任何影响。

这是使用的替代方法Array.prototype.includes()

products.filter(({category}) => selectedProducts.includes(category));

完整片段:

const selectedProducts = ['music', 'dance']
const products = [
    {
        ID : 1,
        name : "pro1",
        category : "music"
    },
    {
        ID : 2,
        name : "pro2",
        category : "yoga"
    },
    {
        ID : 3,
        name : "pro3",
        category : "music"
    },
    {
        ID : 4,
        name : "pro4",
        category : "dance"
    },
]

function filterFunction(){
    return products.filter(({category}) => selectedProducts.includes(category));
}

console.log(filterFunction());


推荐阅读