You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:48:04