javascript - 在不知道鍵的情況下的通用過濾函數
我想要製作一個通用的 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
或許你可以修改你的過濾邏輯,使得傳遞給你的 list 陣列的 filter() 的回呼函數,如下面詳述的,包裝對 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);
}
}
如上所示,這個解決方案使用了 .some() 方法在 searchProperties 陣列上,如果傳遞給 some() 的回呼函數對 searchProperties 陣列中的任何項目返回 true,則會返回 true。
希望這對你有幫助!
