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

TypeScript中动态键对象解构的性能优化方案问询

优化方案:提升数据集匹配性能

以下是针对你的性能问题优化后的完整代码,同时会拆解核心优化点:

export async function filterItems(
  usersItems: Record<string, string>[],
  latestItems: Record<string, string>
): Promise<string[]> {
  // 预先生成latestItems值的Set,将O(n)查找转为O(1)
  const latestVersions = new Set(Object.values(latestItems));
  const filteredItemsForUser: string[] = [];

  for (const item of usersItems) {
    // 利用usersItems每个元素是单键对象的特性,直接获取唯一键值对
    const itemId = Object.keys(item)[0];
    const version = item[itemId];
    
    if (latestVersions.has(version)) {
      filteredItemsForUser.push(itemId);
    }
  }

  console.log("filteredItemsForUser: " + filteredItemsForUser);
  return filteredItemsForUser;
}

// 测试数据
const usersItems: Record<string, string>[] = [
  {"id1": "ID#id1#VERSION#1"},
  {"id2": "ID#id2#VERSION#1"},
  {"id4": "ID#id4#VERSION#2"},
  {"id6": "ID#id6#VERSION#1"},
];

const latestItems: Record<string, string> = {
  "id1": "ID#id1#VERSION#1",   // 匹配
  "id2": "ID#id2#VERSION#4",   // 不匹配(版本不同)
  "id3": "ID#id3#VERSION#5",   
  "id4": "ID#id4#VERSION#2",   // 匹配
  "id5": "ID#id5#VERSION#5",
  "id6": "ID#id6#VERSION#6",   // 不匹配(版本不同)
};

filterItems(usersItems, latestItems);

核心优化点

  • 版本查找效率从O(n)升级为O(1):
    原代码中每次调用Object.values(latestItems).includes(version)都会遍历5k条数据的数组,而Set的has()方法基于哈希表实现,单次查找仅需O(1)时间,预先生成一次Set即可复用所有查找操作,直接砍掉大量重复遍历开销。
  • 移除冗余内层循环:
    从测试数据能明确usersItems的每个元素都是单键值对对象,原代码里的内层for...of Object.entries(item)循环完全多余,直接通过Object.keys和对象取值获取键值对,避免不必要的循环与解构消耗。
  • 避免重复计算:
    原代码在每次内层循环都会重新生成Object.values(latestItems)数组,优化后仅在函数开头生成一次Set,彻底消除重复创建数组的内存与性能浪费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:22:50