【问题标题】:How to filter id string contains substring如何过滤id字符串包含子字符串
【发布时间】:2022-12-05 18:38:25
【问题描述】:

我有一个输入,可以是街道、邮政编码、城市或它们的组合。我想过滤包含这些字段中任何字符串的对象数组。

getFilterCentersSuggestions(term: string) {
    term = term.toLowerCase();
    return this.listOfCenters.filter((c) => c.city.toLowerCase().includes(term) || c.postalCode.toLowerCase().includes(term) || c.province.toLowerCase().includes(term));
  }

如果输入只有一个术语,则此代码有效,但如果例如输入是“城市邮政编码”,则它不起作用......

有没有什么方法可以直接过滤对象字段,或者我必须拆分输入并在过滤器内部制作一个过滤器?

例子:

大批:

[
  {
    id: "1",
    city: "city1",
    street: "street1",
    postalCode: "postalCode1"
  },
  {
    id: "2",
    city: "city1",
    street: "street2",
    postalCode: "postalCode2"
  },
  {
    id: "3",
    city: "city2",
    street: "street3",
    postalCode: "postalCode3"
  },
]

输入 1:“城市 1 邮政编码 1”

预期结果 1:id == 1 的对象


输入 2:“城市1”

预期结果 1:id == 1 && id == 2 的对象

【问题讨论】:

  • 在数组上拆分和过滤数组。许多骗子
  • 你能举一个输入的例子吗?它应该作为输出返回什么?谢谢

标签: javascript arrays filter


【解决方案1】:

要根据多个子字符串过滤对象数组,您可以使用 Array.prototype.every 方法检查所有子字符串是否包含在任何对象字段中。

以下是如何使用它的示例:

getFilterCentersSuggestions(term: string) {
    term = term.toLowerCase();
    const substrings = term.split(" ");
    return this.listOfCenters.filter(c => {
      return substrings.every(substring => {
        return c.city.toLowerCase().includes(substring) || c.postalCode.toLowerCase().includes(substring) || c.province.toLowerCase().includes(substring);
      });
    });
  }

这将根据空格将输入字符串拆分为多个子字符串,然后检查每个子字符串是否包含在任何对象字段中。如果包含所有子字符串,则该对象将包含在过滤后的数组中。

【讨论】:

    【解决方案2】:
    getFilterCentersSuggestions(termsString: string) {
      const terms = termsString.toLowerCase().split(' ')
      return this.listOfCenters.filter(c => 
        [c.city, c.postalCode, c.province].some(i=>
          terms.some(term=>i.toLowerCase().includes(term))))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 2021-12-31
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多