如何从多维对象中高效提取指定国家的所有max值?
如何高效提取多维对象中指定国家的所有max值?
原始数据与需求
给定如下多维对象:
const data = { "usa": { "a": { "min": 1, "max": 2, "avg": 1.5 }, "b": { "min": 3, "max": 5, "avg": 4 } }, "canada": { "c": { "min": 1, "max": 2, "avg": 1.5 } } }
需要实现函数getMaxValues,传入国家名称后,返回该国家对应第二维度下所有对象的max值组成的数组,且希望用更高效的方式实现,避免手动遍历。
核心结论
在JavaScript/TypeScript中,不存在完全绕过遍历的实现方式——要提取每个第二维度对象的max值,必须逐个访问这些对象。其他语言的"专用函数"本质也是封装了遍历逻辑,只是底层实现对开发者不可见。
不过可以用语言内置的高效API实现,或者通过预处理进一步优化查询性能:
方法1:使用内置API简洁实现
利用Object.values提取第二维度的所有对象,再通过map提取max值,代码简洁且引擎做了底层优化,性能优于手动写循环:
function getMaxValues(country: string): number[] { const countryData = data[country]; if (!countryData) return []; // 处理不存在的国家 return Object.values(countryData).map(item => item.max); }
方法2:提前预处理(高频查询场景最优)
如果该函数会被频繁调用,且原始data不会频繁修改,建议提前预处理所有国家的max数组,后续查询直接返回结果,时间复杂度为O(1):
// 仅需预处理一次 const preprocessedMaxData: Record<string, number[]> = {}; for (const country in data) { preprocessedMaxData[country] = Object.values(data[country]).map(item => item.max); } // 查询函数 function getMaxValues(country: string): number[] { return preprocessedMaxData[country] || []; }
内容的提问来源于stack exchange,提问作者emervi
相关产品推荐
相关产品推荐

