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

如何高效拆分与过滤两个数组?按指定前缀筛选arr2元素存入op_array

解决方案

先说说你现有代码的问题:

  • arr2 是数组,不能直接调用 split() 方法,得遍历每个元素处理
  • 逻辑方向错了:你要筛选的是 arr2 里的元素,不是 arr1,原代码用 arr1.filter 完全偏离需求
  • 前缀在 ~ 前面,split 后应该取索引 [0] 而非 [1]

基础实现(单次查询场景)

如果只是偶尔查一次,用 Array.filter 结合字符串 startsWith 方法最直观高效:

const arr1 = ['A','B','C','D']
const arr2 = ['A~XX','A~XXX','B~YY','B~YYY']

function getItemsByPrefix(prefix) {
  // 检查元素是否以「前缀~」开头
  return arr2.filter(item => item.startsWith(`${prefix}~`));
}

// 测试示例
console.log(getItemsByPrefix('A')); // ['A~XX','A~XXX']
console.log(getItemsByPrefix('B')); // ['B~YY','B~YYY']
console.log(getItemsByPrefix('C')); // []

startsWith 是原生字符串方法,内部实现比手动 split 再比较更高效。

高效预处理(多次查询场景)

如果需要频繁按前缀查询,建议先对 arr2 做一次预处理,把元素按前缀分组存入 Map,之后查询直接取值,时间复杂度降到 O(1):

const arr1 = ['A','B','C','D']
const arr2 = ['A~XX','A~XXX','B~YY','B~YYY']

// 预处理:仅需执行一次
const prefixGroupMap = new Map();
arr2.forEach(item => {
  const [prefix] = item.split('~'); // 解构快速获取前缀
  if (!prefixGroupMap.has(prefix)) {
    prefixGroupMap.set(prefix, []);
  }
  prefixGroupMap.get(prefix).push(item);
});

// 查询函数
function getItemsByPrefix(prefix) {
  // 无对应前缀时返回空数组
  return prefixGroupMap.get(prefix) || [];
}

// 测试示例
console.log(getItemsByPrefix('A')); // ['A~XX','A~XXX']
console.log(getItemsByPrefix('B')); // ['B~YY','B~YYY']

这种方式适合多次查询的场景,预处理一次后,后续查询几乎没有性能开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:42:09