通用过滤器功能,不知道键

时间:2019-05-02 01:21:58

标签: javascript reactjs typescript

我想制作一个通用的javascript方法,该方法可以在不知道键的情况下过滤列表。

这就是我已经走了多远,而且我不知道如何继续。我知道这foreach代码是不正确的,但我这样写它,以便您可以更容易地理解我正在尝试做的事情。

有人可以帮忙吗?

filterList(): void {
    let searchtext = this.state.currentSearchBoxValue;
    let searchProperties = this.state.searchBoxOptions.searchProperties;

    let list = this.props.list;

    if(searchtext != undefined && searchtext != '' && searchtext != null) 
    {
        let keys = Object.keys(list[0]);

        searchProperties.forEach(key => {
            list.filter(item => item[key].includes(searchtext));
        })
    }     
}

1 个答案:

答案 0 :(得分:1)

也许您可以修改过滤逻辑,以便传递到filter()数组上的list的回调包装searchProperties的迭代,如下所示:

filterList(): void {
    let searchtext = this.state.currentSearchBoxValue;
    let searchProperties = this.state.searchBoxOptions.searchProperties;

    let list = this.props.list;

    if(searchtext != undefined && searchtext != '' && searchtext != null) 
    {    
        /* Call filter to filter items that match search criteria */
        const filteredList = list.filter(item => {

            /* Search for any property where the some() criteria is true for 
               current item */
            return searchProperties.some(searchProperty => {

                /* If item value on current searchProperty key includes searchText, 
                   return true. This means some() will return true, and
                   the "item" will be included in filteredList */
                const itemPropertyValue = item[ searchProperty ];

                return itemPropertyValue.includes(searchtext);
            });
        });

        /* Filtered result */
        console.log(filteredList);
    }     
}

如上所示,该解决方案在searchProperties数组上使用.some()方法,如果传递给true的回调函数对其中的任何项返回true,则返回some()searchProperties数组。

希望有帮助!