我尝试在类似的列表中搜索“ ego d16”


自我法拉D16
自我d16
自我d22
d16自我
自我d16


必须以第(1、2、4、5)行为准...

我的代码是

var filter = $(this).val(); //like 'ego d16'
$("#rezultate li").each(function () {
    if ($(this)[0].getAttribute('tags').toLowerCase().search(new RegExp(filter, "i")) < 0) {
        $(this).hide();
    } else {
        $(this).show()
    }
});


我的实际结果是仅行(2)

我该如何解决?谢谢!

最佳答案

这是未简化的代码,但是干净且易于理解。它应该做您期望的。想法是拆分输入并检查您提供的列表中的哪些项目包含原始输入的每个部分。如果字符串缺少输入的一部分,则没有匹配项。

var search = "ego d16"; //Input
var strings = ["ego fara d16","ego d16","ego d22","d16 ego","para ego dela d16"] //Test Strings

var searchItems = search.split(" "); //Array of all separate words in 'search'
var results = []; //Indexes of all matches
for (var i = 0; i < strings.length; i++)
{
    var inside = true;
    for (var j = 0; j < searchItems.length; j++)
    {
        if (!strings[i].includes(searchItems[j]))
        {
            inside = false;
        }
    }
    if (inside)
    {
        results.push(i)
    }
}


不过,想出一个更好的方法并不难

07-24 17:09