[英]Array filter with more than one element
我正在嘗試過濾具有多個元素的文本匹配的數組。 但是我的實現只使用第一個元素來過濾數組。
dataSource =
dataSource &&
dataSource.itemList.filter((result: any) =>
(
result.lotNumber ||
result.year ||
result.make ||
result.model ||
result.stockNumber ||
result.vin ||
result.mileageType ||
result.intColor ||
result.engine ||
result.crGrade ||
result.transmission ||
result.sellerName
)
.toLowerCase()
.includes(searchedText.toLowerCase())
);
在我的解決方案中,它僅適用於result.lotNumber
。 這里似乎有什么問題?
連接值並且不使用布爾運算符。
dataSource =
dataSource &&
dataSource.itemList.filter((result: any) =>
(
'' +
result.lotNumber + ' ' +
result.year + ' ' +
result.make + ' ' +
result.model + ' ' +
result.stockNumber + ' ' +
result.vin + ' ' +
result.mileageType + ' ' +
result.intColor + ' ' +
result.engine + ' ' +
result.crGrade + ' ' +
result.transmission + ' ' +
result.sellerName
)
.toLowerCase()
.includes(searchedText.toLowerCase())
);
通過使用||
,搜索是基於第一個值而不是假的。
您可以添加空格以防止連接的值錯誤地匹配某些內容。
例子:
如果
result.model = 'V' 和
結果.stockNumber = '2'
通過查找“V2”,您將有一個匹配項,盡管它不應該。 通過添加空格,您可以防止這種情況。
增強sjahan的答案,您可以迭代 result 的對象鍵, result
無需手動一一添加:
dataSource =
dataSource &&
dataSource.itemList.filter((result: any) =>
(Object.keys(result).map(key => result[key])).join(' ')
.toLowerCase()
.includes(searchedText.toLowerCase())
);
const itemList = [{ lotNumber: '123', year: '2020', make: 'doe', model: 'model', }, { lotNumber: '456', year: '2019', make: 'jane', model: 'othermodel', }]; const result = (search) => itemList.filter((result) => (Object.keys(result).map(key => result[key])).join(' ') .toLowerCase() .includes(search.toLowerCase()) ); console.log(result('123')); console.log(result('jane'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.