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

JavaScript实现数组合并:同前缀元素集中排列并去重

JavaScript 数组拼接实现方案

需求说明

给定两个数组:

  • 基础数组 column_list,示例值:["ab","bc","cd","asv_a","asv_f","asv_l","asv_x", "xy","yz"]
  • 待合并数组 new_column,所有元素均带asv_前缀,元素可重复,示例值:["asv_b", "asv_f", "asv_s"]

合并后需要满足:

  • 所有带asv_前缀的元素集中排列在数组中间
  • 全量元素去重
  • 不带asv_前缀的元素,保留原有相对顺序,分为前后两段
  • 示例预期输出:["ab","bc","cd","asv_a","asv_f","asv_l","asv_x","asv_b", "asv_s", "xy","yz"]

实现逻辑

  1. 遍历基础数组,用标记位区分是否已经遇到过asv_前缀元素:遇到之前的非asv元素归为前缀段,遇到之后的非asv元素归为后缀段,同时收集基础数组中已有的asv元素并去重
  2. 合并基础数组的asv元素和待合并数组的asv元素,用Set去重,保留原有出现顺序:基础数组里的asv按原顺序排列,待合并数组里新增的asv按出现顺序追加,重复元素自动过滤
  3. 按「前缀段 + 去重合并后的asv段 + 后缀段」的顺序拼接,得到最终结果

可运行代码

function mergeColumns(column_list, new_column) {
  const ASV_PREFIX = 'asv_';
  const prefixPart = [];
  const suffixPart = [];
  const asvCollection = [];
  let hasReachAsvArea = false;

  // 拆分原数组
  for (const item of column_list) {
    if (item.startsWith(ASV_PREFIX)) {
      hasReachAsvArea = true;
      if (!asvCollection.includes(item)) {
        asvCollection.push(item);
      }
    } else {
      hasReachAsvArea ? suffixPart.push(item) : prefixPart.push(item);
    }
  }

  // 合并新的asv元素,去重
  const asvSet = new Set(asvCollection);
  new_column.forEach(item => {
    if (!asvSet.has(item)) asvSet.add(item);
  });

  // 拼接最终结果
  return [...prefixPart, ...asvSet, ...suffixPart];
}

// 测试用例
const column_list = ["ab","bc","cd","asv_a","asv_f","asv_l","asv_x", "xy","yz"];
const new_column = ["asv_b", "asv_f", "asv_s"];
const result = mergeColumns(column_list, new_column);
console.log(result);
// 输出与预期一致:["ab","bc","cd","asv_a","asv_f","asv_l","asv_x","asv_b", "asv_s", "xy","yz"]

兼容性说明

该实现同时兼容极端场景:

  • 基础数组无asv元素时,合并后的asv段会接在所有原数组元素之后
  • 基础数组全为asv元素时,前后缀段为空,直接返回去重后的全量asv数组
  • new_column存在重复元素时,会自动过滤重复项,保留第一次出现的位置

内容的提问来源于stack exchange,提问作者Mukul Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:03:54