我想制作一个通用的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));
})
}
}
答案 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
数组。
希望有帮助!