JavaScript如何匹配关键词后收集连续数字生成指定结构对象数组
问题分析
原代码仅收集了匹配关键词后的连续数字,没有记录数字对应的关键词,也没有按照要求的结构存储数据。
修改思路
- 提前初始化一个结果对象,用于存储「关键词: 对应连续数字数组」的键值对
- 每次匹配到words中的关键词时,先创建一个空的临时数组存放后续的连续数字
- 遍历完该关键词后的所有连续数字后,判断临时数组是否非空,只有非空的情况下才将关键词和临时数组存入结果对象
- 最后将结果对象包裹进数组,得到要求的输出格式
修改后代码
const words = ['blue' , 'red' , 'yellow' , 'grin' , 'black' , 'white']; const text = ['xxx' , 'yyy' , 'red' , 'zzz' , 'black' , 65 , 54 , 'white' , 'aaa' , 'yellow' , 50, 'ppp']; const wordSet = new Set(words); // 初始化存储键值对的对象 const resObj = {}; for (let i = 0; i < text.length; i++) { const current = text[i]; if (wordSet.has(current)) { const nums = []; // 收集后续连续数字,加边界判断避免数组越界 while (i + 1 < text.length && typeof text[i + 1] === 'number') { nums.push(text[++i]); } // 只有存在数字的关键词才存入结果对象 if (nums.length > 0) { resObj[current] = nums; } } } // 按要求把对象放入数组返回 const result = [resObj]; console.log(result); // 输出: [ { black: [ 65, 54 ], yellow: [ 50 ] } ]
逻辑说明
- 新增了数组边界判断,避免关键词出现在数组末尾时访问
i+1越界报错 - 仅当关键词后有连续数字时才存入结果,所以示例中
red、white等后面没有数字的关键词不会被计入 - 最终输出完全符合要求的数组包裹对象的结构
内容的提问来源于stack exchange,提问作者dumpAndDie
相关产品推荐
相关产品推荐

