簡體   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