在对象属性中搜索多个单词

问题描述 投票:0回答:1

我有一个对象数组,这里以某种简化的形式显示。 我希望能够搜索不同的搜索词。一方面,我想获取包含所有搜索词的所有对象,另一方面,我想获取包含任何搜索词的所有对象。搜索词的数量是动态的。

例如对于 (x1 和 x2) , (x1 或 x2)

当然我可以用循环来做到这一点,但是还有一种方法可以用过滤器解决问题...包括...

[
    {
      "produkt": "Produkt 1",
      "description": "x1, x2, x3, x4"
    },
    {
      "produkt": "Produkt 1",
      "description": "x2, x3"
    },
    {
      "produkt": "Produkt 1",
      "description": "x1, x4"
    }
]
javascript
1个回答
0
投票

这可能有点复杂,但如果您想要一个可重用的函数,您可以使用您的产品和搜索词进行调用,这是获取具有所有搜索词的产品和具有其中任何搜索词的产品的有效方法。

const produkts = [
        {
            "produkt": "1",
            "description": "x1, x2, x3, x4"
        },
        {
            "produkt": "2",
            "description": "x3"
        }
    ]

    const findProdukts = (produkts, searchTerms: string[]) => {
        let results = {
            matchesAll: [],
            matchesSome: []
        }

        return produkts.reduce((acc: {matchesAll: [any], matchesSome: [any]}, val: {produkt: string, description: string}) => {
            return {
                matchesAll: searchTerms.every(search => val.description.includes(search)) ? [...acc.matchesAll, val] : [...acc.matchesAll],
                matchesSome: searchTerms.some(search => val.description.includes(search)) ? [...acc.matchesSome, val] : [...acc.matchesSome]
            }
        }, results)
    }

    console.log(findProdukts(produkts, ["x2", "x3"]))
© www.soinside.com 2019 - 2024. All rights reserved.