如何匹配元素值并收集数组中-p/--name后的连续元素
获取数组中指定标记后连续元素的实现
核心逻辑
针对匹配-p、--name两类标记、收集标记后所有连续非标记元素的需求,遍历过程中跟踪收集状态即可实现:
- 先把需要匹配的标记存到集合里,方便快速判断命中
- 遍历时如果碰到目标标记,就切换当前收集上下文到这个标记,初始化对应的存储数组
- 碰到非标记元素时,如果当前处于收集上下文,就把元素存到对应标记的数组里
- 碰到下一个标记时,自动结束上一个标记的收集,切换到新标记的收集流程
JavaScript 实现代码
function collectElementsAfterFlags(arr, flags) { const flagSet = new Set(flags); const collected = {}; let activeFlag = null; for (const item of arr) { if (flagSet.has(item)) { activeFlag = item; collected[activeFlag] = []; continue; } if (activeFlag) { collected[activeFlag].push(item); } } return collected; } // 传入示例数组测试 const demoArr = ['-p', 'player', '1', '--name', 'player1', 'name']; const result = collectElementsAfterFlags(demoArr, ['-p', '--name']);
运行结果
针对给出的示例数组,最终返回的结果结构如下:
{ "-p": ["player", "1"], "--name": ["player1", "name"] }
如果需要获取单个标记对应的后续元素,直接从返回结果中读取对应属性即可,比如读取-p后的元素就取result["-p"]。
这个逻辑是通用的,如果需要新增其他匹配标记,只要往传入的flags参数里加对应标记值就行,不需要修改核心逻辑。
内容的提问来源于stack exchange,提问作者KanPots
相关产品推荐
相关产品推荐

