JS获取对象数组所有键的并集 寻求ES6+更高性能实现方案
你当前的实现每次迭代都会重新实例化Set、多次展开数组,会反复遍历已收集的唯一键,数据量较大时存在大量不必要的性能开销。
方案1:简洁高性能写法(ES2019+ 兼容)
使用flatMap直接拍平所有对象的键数组,仅做一次Set去重,全程仅遍历所有键一次,无重复的中间实例创建开销:
const uniqueKeys = [...new Set(all.flatMap(Object.keys))];
该实现与你原有代码的输出结果完全一致,性能是原实现的数倍,数据量越大提升幅度越明显。
方案2:极致性能优化写法
如果处理的对象数组规模极大,可以直接遍历所有键插入Set,完全避免中间数组的生成和展开操作,达到理论最优时间复杂度:
const keySet = new Set(); for (const obj of all) { for (const key of Object.keys(obj)) { keySet.add(key); } } const uniqueKeys = [...keySet];
扩展提示
如果需要同时收集Symbol类型的键、不可枚举的自有键,可以将Object.keys替换为Reflect.ownKeys。
内容的提问来源于stack exchange,提问作者Priyesh Singhai
相关产品推荐
相关产品推荐

