繁体   English   中英

具有多个元素的数组过滤器

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM