Задать вопрос

Как сделать поиск по тексту соответствий из массива неопределенной длины?

Есть массив который может иметь любое количество елементов, есть много маленьких текстов которые я получаю при итерацих по которому нужно провести поиск через indexOf(), нужно в результате всех итераций получить массив с string'ами которые проиндексированы так что если в string'е соответствий из массива неопределенной длины больше то они будут первыми в массиве, те что имеют минимум соответствий будут последними в массиве. Я тут ломаю голову как это сделать без удалений, изменений массива-результата, тоесть без unshift'ы всякие и вовсе все действия с массивом при котором большая часть елементов массива изменять свой индекс. Лишняя нагрузка не нужна.

Какой то пример:
const arr = ['apple', 'fish', 'doctor']

const texts = ['fish apple gray 84836', 'apple dog cat 858363', 'apple fish doctor 937226', 'dog cat friend 483837',...] // Это просто представление получения string'ов. 

for (let text of texts) {
    ... // Тут каждый text нужно проверить на соответствия.
} 

const result = ['apple fish doctor 937226','fish apple gray 84836','apple dog cat 858363'] // Это то как должен выглядеть массив результат.
  • Вопрос задан
  • 96 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
XanXanXan
@XanXanXan
function sortByMatches(matchesArr, strArr) {
  return strArr.filter(e => matchesArr.some(i => e.includes(i))) 
    .sort((a, b) => {
      const countA = matchesArr.filter(i => a.includes(i)).length;
      const countB = matchesArr.filter(i => b.includes(i)).length;
      return countB - countA;
    });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы