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

基于两个关联已排序数组同步生成对应class的span标签方案咨询

实现方案

思路说明

两个数组已经完成升序排序,直接使用双指针法遍历即可,时间复杂度为O(n+m),不需要额外合并排序,性能最优。
规则适配逻辑:

  • 数值更小的元素优先输出
  • 数值相同时优先输出class为main的span

代码实现

生成HTML字符串版本

const mains = [1, 5, 6, 8 , 12];
const secondaries = [1, 6, 12];

let i = 0, j = 0;
const spanList = [];

while (i < mains.length || j < secondaries.length) {
  if (i < mains.length && (j >= secondaries.length || mains[i] <= secondaries[j])) {
    // 数值相等时先加main,再加secondary
    if (j < secondaries.length && mains[i] === secondaries[j]) {
      spanList.push(`<span class="main"> ${mains[i]} </span>`);
      spanList.push(`<span class="secondary"> ${secondaries[j]} </span>`);
      i++;
      j++;
    } else {
      // main当前值更小,仅添加main的span
      spanList.push(`<span class="main"> ${mains[i]} </span>`);
      i++;
    }
  } else {
    // secondary当前值更小,添加secondary的span
    spanList.push(`<span class="secondary"> ${secondaries[j]} </span>`);
    j++;
  }
}

// 拼接为完整div的HTML字符串
const divHtml = `<div>${spanList.join('\n')}</div>`;
// 可直接用于渲染
console.log(divHtml);

直接生成DOM元素版本

如果需要直接插入页面DOM中,可以用如下实现:

const mains = [1, 5, 6, 8 , 12];
const secondaries = [1, 6, 12];

const container = document.createElement('div');
let i = 0, j = 0;

while (i < mains.length || j < secondaries.length) {
  if (i < mains.length && (j >= secondaries.length || mains[i] <= secondaries[j])) {
    if (j < secondaries.length && mains[i] === secondaries[j]) {
      const mainSpan = document.createElement('span');
      mainSpan.className = 'main';
      mainSpan.textContent = ` ${mains[i]} `;
      container.appendChild(mainSpan);
      
      const secSpan = document.createElement('span');
      secSpan.className = 'secondary';
      secSpan.textContent = ` ${secondaries[j]} `;
      container.appendChild(secSpan);
      i++;
      j++;
    } else {
      const mainSpan = document.createElement('span');
      mainSpan.className = 'main';
      mainSpan.textContent = ` ${mains[i]} `;
      container.appendChild(mainSpan);
      i++;
    }
  } else {
    const secSpan = document.createElement('span');
    secSpan.className = 'secondary';
    secSpan.textContent = ` ${secondaries[j]} `;
    container.appendChild(secSpan);
    j++;
  }
}

// 插入到页面指定位置,示例为插入body
document.body.appendChild(container);

输出验证

运行上述代码生成的span顺序和你给出的预期结果完全一致。

内容的提问来源于stack exchange,提问作者Sara Ree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:05