如何找出对象中值最大的属性?附数组频率统计实现代码
问题一:找出对象中值最大的属性
现有对象:
let obj1 = { 1:1,2:1,4:3};
要输出值最大的属性4,可以通过以下代码实现:
let obj1 = { 1:1,2:1,4:3}; // 转换为键值对数组便于遍历 const entries = Object.entries(obj1); let maxValue = -Infinity; let targetKey = ''; // 遍历比较每个属性值,记录最大值对应的键 for (const [key, value] of entries) { if (value > maxValue) { maxValue = value; targetKey = key; } } console.log(targetKey); // 输出 "4"
问题二:修改函数返回频率最高的数字
原代码存在内层循环起始值错误、中断逻辑不合理的问题,且仅返回最大频率值。以下是修正后的完整实现:
let arr1 = [1, 2, 3, 4, 4, 4, 5]; let arr1Obj = {}; function findMaxFreq(arr, freqObj) { // 第一步:正确统计每个数字的出现频率 for (let i = 0; i < arr.length; i++) { const num = arr[i]; // 已有记录则计数+1,无记录则初始化为1 freqObj[num] = (freqObj[num] || 0) + 1; } // 第二步:根据频率找出对应数字 let maxFreq = 0; let maxFreqNum = null; for (const [numStr, freq] of Object.entries(freqObj)) { const num = Number(numStr); if (freq > maxFreq) { maxFreq = freq; maxFreqNum = num; } } return maxFreqNum; } console.log(findMaxFreq(arr1, arr1Obj)); // 输出 4
如果偏好使用嵌套遍历统计频率,也可以修正原逻辑:
function findMaxFreq(arr, freqObj) { // 清空频率对象,避免多次调用残留旧数据 Object.keys(freqObj).forEach(key => delete freqObj[key]); for (let i = 0; i < arr.length; i++) { const num = arr[i]; // 跳过已统计过的数字 if (freqObj[num] !== undefined) continue; let count = 1; // 从当前元素的下一位开始遍历统计 for (let j = i + 1; j < arr.length; j++) { if (arr[j] === num) count++; } freqObj[num] = count; } // 查找频率最高的数字 let maxFreq = 0; let maxFreqNum = null; for (const [numStr, freq] of Object.entries(freqObj)) { const num = Number(numStr); if (freq > maxFreq) { maxFreq = freq; maxFreqNum = num; } } return maxFreqNum; }
内容的提问来源于stack exchange,提问作者Ashuthosh Kanathala
相关产品推荐
相关产品推荐

