JavaScript如何实现符号数组非重叠配对,避免连续符号重叠匹配
代码调整方案
原有逻辑会逐元素校验当前元素与下一个元素是否符合配对规则,未跳过已配对的后续元素,因此连续三个符号会生成重叠配对。调整思路为配对成功后直接跳过下一个元素的校验,避免重复匹配。
推荐实现(for循环,可读性更高)
const text = [ 'aaaa', 'BTC', '08', '324', 'ETH', '233', 'yyyy', '30000', 'XRP', 'xxxxxGG', 'llll', '546', 'BCH', 'LTC', 'xxxyyy', '435', 'XLM', 'DASH', 'COIN' ]; const symbols = ['XLM','XTZ','BTC','DASH','COIN','ETH','LTC','BNB','BCH','XRP']; const symbolSet = new Set(symbols); const result = []; // 控制遍历步长,配对成功就多跳一位 for (let i = 0; i < text.length - 1; i++) { const curr = text[i]; const next = text[i + 1]; if (symbolSet.has(curr) && symbolSet.has(next)) { result.push(`${curr}/${next}`); i++; } } console.log(result); // 输出:['BCH/LTC', 'XLM/DASH']
保留reduce的实现版本
如果你不想改动原有编码风格,也可以通过在累加器中增加跳过标记实现需求:
const symbolSet = new Set(symbols); const { result } = text.reduce((acc, curr, index, source) => { // 命中跳过标记则直接返回 if (index === acc.skipIndex) return acc; const next = source[index + 1]; if (symbolSet.has(curr) && symbolSet.has(next)) { acc.result.push(`${curr}/${next}`); // 标记下一个索引需要跳过 acc.skipIndex = index + 1; } return acc; }, { result: [], skipIndex: -1 }); console.log(result); // 输出:['BCH/LTC', 'XLM/DASH']
内容的提问来源于stack exchange,提问作者calisa
相关产品推荐
相关产品推荐

