[英]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.