Реагируйте на поиск по нескольким словам - PullRequest
0 голосов
/ 04 августа 2020

Я изучаю, как выполнить поиск по нескольким словам. Я нашел этот пример Многоканальный фильтр с крючками .

const filterIt = (terms, arr) => {
  if ("" === terms || terms.length < 3) return arr;
  const words = terms.match(/\w+|"[^"]+"/g);
  words.push(terms);
  return arr.filter((a) => {
    const v = Object.values(a);
    const f = JSON.stringify(v).toLowerCase();

    return words.every(val => f.includes(val));
  });
};

const FilteredList = () => {
  const [items, setItems] = useState([]);

  const filterList = useCallback(({target}) => {
    const searchQuery = target.value.toLowerCase();
    const updatedList = filterIt(searchQuery, initialItems);
    setItems(updatedList);
  }, []);

Я пытаюсь изменить его, чтобы я мог разделять слова пробелом. Например, я ввожу «железный костюм», и поиск дал мне:

enter image description here

At the moment, the search does not return anything:

введите описание изображения здесь

Будем признательны за любые советы.

1 Ответ

0 голосов
/ 04 августа 2020

Я немного поигрался с вашим примером кода и пришел к следующему:

const filterIt = (terms, arr) => {
  if ("" === terms || terms.length < 3) return arr;
  var words = terms.match(/"[^"]+"|\w+/g);
  
  words = words.map(val => val.replace(/\"/g, ""));
  //words.push(terms);
  
  return arr.filter((a) => {
    const v = Object.values(a);
    const f = JSON.stringify(v).toLowerCase();

    return words.every(val => f.includes(val));
  });
};

, который позволяет мне искать без кавычек

enter image description here

and with quotes

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...