Таким образом, для каждого прогноза API автозаполнения Google google также возвращает подходящие подстроки для каждой.
Ввод: Сан 68
Прогноз: Сан-Франциско 68
Подходящие подстроки: [{ offset: 0, length: 3 }, { offset: 15, length: 2 }]
Ожидание: Сан Франциско 68
Моя цель состоит в том, чтобы выделить части прогноза, используя соответствующие подстроки. Теперь есть несколько проблем. Я мог бы использовать функцию replace
и заменить каждую подстроку на <b>str</b>
, но она возвращает строку, что означает, что, если я не использую dangerouslySetInnerHTML
, этот метод не работает.
Я также не думаю, что есть способ заменить несколько подстрок. Я пытался использовать функцию reduce
, но после первого l oop это не сработало бы, потому что индексы были бы неправильными.
const highlight = (text, matched_substrings) => {
return matched_substrings.reduce((acc, cur) => {
return acc.replace(
acc.substring(cur.offset, cur.length),
(str) => `<b>${str}</b>`
)
}, text)
}
Так есть ли способ сделать это? Я думаю, что React делает это более сложным.