Как сделать поиск по тексту соответствий из массива неопределенной длины?
Есть массив который может иметь любое количество елементов, есть много маленьких текстов которые я получаю при итерацих по которому нужно провести поиск через 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'] // Это то как должен выглядеть массив результат. |
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'] // Это то как должен выглядеть массив результат.
Дополнительно:
Ответы:
https://jsbin.com/dewogoxoqu/edit?js,console
- а на js заработает если убрать типизацию?
- Yukan Mukimura, конечно
- dicem, ток проблемка, там неправильно выводится результат массив, больше всего совпадений = первые индексы массива, меньше всего совпадений = послежние индексы.
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; }); |
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; });
- Не не не, такое не сойдет совсем
- Что не работает?
- Чипекве, я тут писал тебе и подумал что я ошибся, отмечу ответом если не найду способ лучше.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы реализовать поиск по тексту соответствий из массива неопределенной длины, можно воспользоваться циклом и условием, которые будут проверять каждый элемент массива на соответствие искомому тексту.
Пример на языке PHP:
// Исходный массив $array = ['apple', 'banana', 'cherry', 'date']; // Текст для поиска $searchText = 'an'; // Создаем пустой массив для хранения найденных соответствий $matches = []; // Проходим по каждому элементу исходного массива foreach ($array as $item) { // Проверяем, содержит ли текущий элемент искомый текст if (strpos($item, $searchText) !== false) { // Если содержит, добавляем его в массив найденных соответствий $matches[] = $item; } } // Выводим найденные соответствия print_r($matches);
В данном примере мы создаем массив $array с элементами ['apple', 'banana', 'cherry', 'date'] и ищем соответствия тексту 'an'. Мы используем цикл foreach для прохода по каждому элементу массива и функцию strpos для проверки наличия искомого текста в каждом элементе. Если соответствие найдено, добавляем элемент в массив $matches. В конце выводим найденные соответствия.
Этот код можно легко адаптировать под различные условия поиска и массивы любой длины. При необходимости можно также использовать регулярные выражения для более сложных поисковых запросов.