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

如何高效将serialList按articleNumberList关联属性分类?

优化数组分类方案:高效替代嵌套循环与冗余判断

需求回顾

将serialList中的对象,根据其ArticleNumber属性与articleNumberList中Article属性的匹配关系,归入对应分类数组中。

原实现存在两个核心问题:

  • 嵌套循环导致时间复杂度为O(n*m),当serialList数据量增长时性能急剧下降
  • 大量if-else判断造成代码冗余,后续新增分类需重复修改逻辑

优化方案:映射表+单循环遍历

步骤1:构建Article到Model的映射表

先将articleNumberList转换为键值对映射,将匹配查找的时间复杂度从O(m)降到O(1):

// 构建Article -> Model的映射表
const articleMap = articleNumberList.reduce((map, item) => {
  map[item.Article] = item.Model;
  return map;
}, {});

步骤2:初始化分类容器并遍历分类

用一个对象统一管理所有分类数组,遍历一次serialList即可完成所有分类:

// 初始化所有分类数组(键名对应articleMap中的Model值)
const categorizedLists = {
  client: [],
  ipad: [],
  phone: [],
  switch: [],
  hardware: [],
  mac: [],
  printer: []
};

// 遍历serialList完成分类
serialList.forEach(serialItem => {
  const targetModel = articleMap[serialItem.ArticleNumber];
  // 仅当匹配到有效分类时才添加
  if (targetModel && categorizedLists[targetModel]) {
    categorizedLists[targetModel].push(serialItem);
  }
});

// 按需提取单独的分类数组(可选)
const clientList = categorizedLists.client;
const ipadList = categorizedLists.ipad;
const phoneList = categorizedLists.phone;
const switchList = categorizedLists.switch;
const hardwareList = categorizedLists.hardware;
const macList = categorizedLists.mac;
const printerList = categorizedLists.printer;

方案优势

  • 时间复杂度降至O(n+m)(n为serialList长度,m为articleNumberList长度),大数据量下性能提升显著
  • 无冗余判断逻辑,后续新增分类只需在categorizedLists中添加对应键值对,无需修改遍历逻辑

备选方案:使用Array.filter()批量生成分类数组

如果分类数量较少,也可以用filter()直接生成各分类数组,但此方法需多次遍历serialList,大数据量下性能不如上述方案:

// 先获取所有有效的Article值,避免匹配无效分类
const validArticles = new Set(articleNumberList.map(item => item.Article));

// 生成各分类数组
const clientList = serialList.filter(item => 
  item.ArticleNumber === 'CLIENT' && validArticles.has(item.ArticleNumber)
);
const ipadList = serialList.filter(item => 
  item.ArticleNumber === 'IPAD' && validArticles.has(item.ArticleNumber)
);
const phoneList = serialList.filter(item => 
  item.ArticleNumber === 'PHONE' && validArticles.has(item.ArticleNumber)
);
// ...其余分类数组以此类推

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:50:43