如何从含600+条目的对象中高效提取去重的eppo值?
提取并去重数组中
eppo值的最快方法 针对你有600多条数据的场景,以下是几种高效的实现方式,按简洁性和性能优先级排序:
1. Set + Array.map(推荐,简洁且高效)
这是现代JavaScript中最简洁的实现,利用Set自动去重的特性,整体时间复杂度为O(n):
// 假设你的数据存在变量data中 const uniqueEppos = [...new Set(data.map(item => item.eppo))];
原理:
data.map(item => item.eppo):遍历数组提取所有eppo值,得到包含重复项的数组new Set(...):将数组转为Set,自动剔除重复值[...Set]:将Set展开回数组格式
2. 手动遍历+Map/对象(性能略优,适合极致场景)
如果追求极致性能(虽然600条数据下差异微乎其微),可以手动遍历一次数据,用Map或普通对象记录已出现的eppo:
用Map实现:
const eppoMap = new Map(); for (const item of data) { // 用eppo作为键,值随便存,只要标记已出现 eppoMap.set(item.eppo, true); } const uniqueEppos = Array.from(eppoMap.keys());
用普通对象实现:
const eppoTracker = {}; for (let i = 0; i < data.length; i++) { const eppo = data[i].eppo; if (!eppoTracker[eppo]) { eppoTracker[eppo] = true; } } const uniqueEppos = Object.keys(eppoTracker);
原理:只遍历一次数组,遇到未记录的eppo就标记,最后提取所有已标记的键,时间复杂度同样是O(n)。
性能说明
对于600条数据的规模,上述几种方法的执行时间差距可以忽略不计。优先推荐第一种写法,代码更简洁易读,维护成本低;如果是处理百万级以上的超大数组,手动遍历的方法可能会有微弱的性能优势。
内容的提问来源于stack exchange,提问作者Amrmsmb
相关产品推荐
相关产品推荐

