如何匹配JSON数组中与输入字符串部分匹配的元素?
实现输入字符串与JSON元素的单词匹配筛选
需求说明
将输入字符串与JSON数组中每个元素的指定字段(如name)进行比对,只要两者的单词集合存在至少一个匹配项(不区分大小写),就返回该元素。
示例
- 输入字符串:
"Angular work space" - 目标JSON数据:
[{"id":1,"name":"angular repo"},{"id":2,"name":"node repo"}]
- 预期结果:返回
{"id":1,"name":"angular repo"},因为输入中的"Angular"与该元素name字段中的"angular"匹配。
实现代码(JavaScript)
// 输入字符串 const inputStr = "Angular work space"; // 标准格式的JSON数据 const data = [{"id":1,"name":"angular repo"},{"id":2,"name":"node repo"}]; // 提取输入的单词并转为小写,用Set存储以提升查找效率 const inputWordSet = new Set(inputStr.toLowerCase().split(/\s+/)); // 筛选符合条件的元素 const matchedItems = data.filter(item => { // 拆分当前元素name字段的单词并转为小写 const itemWords = item.name.toLowerCase().split(/\s+/); // 检查是否存在匹配的单词 return itemWords.some(word => inputWordSet.has(word)); }); console.log(matchedItems);
关键逻辑说明
- 大小写统一:将输入字符串和JSON字段的内容都转为小写,避免大小写差异导致的匹配失败。
- 单词拆分:用
split(/\s+/)拆分字符串,支持多个连续空格的场景。 - 高效查找:用
Set存储输入的单词,将查找时间复杂度降为O(1)。 - 匹配判断:用
some()方法检查当前元素的单词是否有任何一个存在于输入单词集合中。
内容的提问来源于stack exchange,提问作者sanju priya
相关产品推荐
相关产品推荐

