我尝试在像
这样的列表中搜索“ego 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)行
我如何解决这个问题?谢谢!
答案 0 :(得分: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)
}
}
虽然
,但提出更好的方法并不难答案 1 :(得分:2)
这样的事情很简单,我想:
let list = [
"ego fara d16",
"ego d16",
"ego d22",
"d16 ego",
"fred flintstone",
"para ego dworda d16",
"para d16"
];
let filters = "ego d16".split(/\s+/);
list.filter(phrase => filters.every(word => phrase.indexOf(word) > -1));
//=> ["ego fara d16", "ego d16", "d16 ego", "para ego dworda d16"]
我认为这非常简单。如果不清楚,请告诉我。