【发布时间】:2021-08-05 03:08:53
【问题描述】:
假设我有一个值数组,我需要过滤并返回基于 keyword 搜索的所有值并返回 3 个结果。
var fruits = ["Banana", "Orange", "Apple", "Mango", "Peach"];
array = array.filter(item => {
return item.toLowerCase().indexOf(term) > -1;
}).slice(0, 3)
我遇到的麻烦是加粗为每个项目搜索的字词。例如,如果我搜索“a”,我应该返回一个 jsx 代码数组,其中每次在结果中列出“a”时,它都是粗体:
[
<span>B<strong>a</strong>n<strong>a</strong>n<strong>a</strong></span>,
<span>Or<strong>a</strong>nge</span>,
<span><strong>A</strong>pple</span>
]
我尝试了一些效果:
array = array.map((item, index) => (
<span>
{item.split('a')} // then somehow join the a back with the strong tags
</span>
));
也尝试过类似的方法,但返回值是字符串格式,据我所知无法转换为 jsx:
array.map(item => {
return item.replace(new RegExp('(' + term + ')', 'ig'), '<strong>$1</strong>');
});
非常感谢任何帮助。
【问题讨论】:
-
从技术上讲,您可以使用
dangerouslySetInnerHTML将字符串转换为 DOM 元素。
标签: javascript arrays reactjs jsx