如何获取哈希表中最长数组的长度及其对应键?
获取哈希表中最长数组的对应键
当然可行!你可以通过稍微调整代码,同时追踪最长数组对应的键和长度,这里有两种常用的实现方式:
方式一:用reduce直接找到目标键和长度
这种方法一步到位,遍历哈希表的键值对并记录当前最长的那一项:
var hash = {}; hash['a'] = ["a", "b", "c", "d", "e"]; hash['b'] = ["a", "b", "c"]; hash['k'] = ["q", "b"]; const longestEntry = Object.entries(hash).reduce((currentMax, [key, arr]) => { // 比较当前数组长度和记录的最大长度,更新结果 return arr.length > currentMax.length ? { key, length: arr.length } : currentMax; }, { key: '', length: 0 }); console.log(`最长数组的键:${longestEntry.key}`); // 输出 'a' console.log(`最长数组的长度:${longestEntry.length}`); // 输出 5
解释:
Object.entries(hash)会把哈希表转换成[[键, 值数组], ...]的二维数组,方便我们同时获取键和对应的数组。reduce方法从初始值{ key: '', length: 0 }开始遍历,每一步都比较当前数组的长度和记录的最大长度,保留更长的那一项的键和长度。
方式二:先找最大长度,再筛选对应键
如果需要处理多个键对应相同最长数组长度的场景(比如哈希表里有两个键的数组长度都是5),这种方法会更灵活:
var hash = {}; hash['a'] = ["a", "b", "c", "d", "e"]; hash['b'] = ["a", "b", "c"]; hash['k'] = ["q", "b"]; // 第一步:计算所有数组的最大长度 const maxLength = Math.max(...Object.values(hash).map(arr => arr.length)); // 第二步:筛选出所有数组长度等于maxLength的键 const longestKeys = Object.keys(hash).filter(key => hash[key].length === maxLength); console.log(`最长数组的长度:${maxLength}`); // 输出 5 console.log(`对应键列表:${longestKeys}`); // 输出 ['a'](如果有多个键会返回数组)
解释:
- 先通过
Object.values(hash).map(...)拿到所有数组的长度,再用Math.max找到最大值。 - 然后用
filter遍历所有键,把数组长度等于最大值的键收集起来,得到的是一个键数组,方便处理多个最长项的情况。
这两种方法都能满足你的需求,你可以根据实际场景选择合适的方式~
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

