Включает метод, работающий только для одного значения, но я хочу отфильтровать несколько значений с помощью запятой, подобной этой "махмуд, файзан", я получу это значение из пользовательского ввода.
json-данные
[{
"text": "adnan hassan"
}, {
"text": "adnan hassan mahmoud",
}, {
"text": "adnan hassan faizan",
}]
Функция фильтра
const filterFunction = (a) => {
if (includeKeyword)
return a.text.includes("mahmoud")
}
Функция фильтра с визуализацией карты
postRes.filter(filterFunction).map((data, index) => (
Я дал вам два оператора возврата на выбор, в зависимости от того, хотите ли вы сопоставить все части или хотя бы одна часть из того, что было введено:
const filterFunction = (a) => {
if (includeKeyword)
const parts = userInput.split(",");
// if you need the returned element to match *all* parts (AND)
return parts.every(p => a.text.includes(p.trim());
// if you need it to match *at least one* part (OR)
return parts.some(p => a.text.includes(p.trim());
}
};
для вашего senario вы можете настроить функцию фильтра, чтобы получить второй параметр и использовать array.some:
const filterFunction = (a, searchArray) => {
if (searchArray.some((v) => a.text.includes(v))) {
return a;
}
};
const result = postRes.filter((item) => filterFunction(item, ["mahmoud", "faizan"]));
console.info("result ", result);
Функция фильтра возвращает логическое значение. Вы можете установить это логическое значение с помощью цикла:
Пример :
const base = [{
"text": "adnan hassan"
}, {
"text": "adnan hassan mahmoud",
}, {
"text": "adnan hassan faizan",
}]
function myFilter(base,query){
const queries = query.split(",")
return base.filter((a)=>{
let doReturn = false;
queries.forEach((q)=>{
if (a.text.includes(q)){
doReturn = true;
}
})
return doReturn;
});
}
console.info(myFilter(base,"faizan,hector,mickey,mahmoud"))
создайте массив из текста поиска с помощью split(','):
const searchParams = searchText.split(',');
затем отфильтруйте массив данных следующим образом:
test — ваш массив данных. searchParams — список параметров поиска:
test.filter(t => searchParams.some(v => t.text.includes(v)))
если вам нравится решать с помощью методов javascript, как указывали многие люди
if (["mahmoud", "faizan"].some((v) => a.text.includes(v))) {
return a;
}
если вам нравится регулярное выражение, сделайте так
if (a.text.match(/(mahmoud|faizan)/)){
return a
}
array.some может помочь