You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找出对象中值最大的属性?附数组频率统计实现代码

问题一:找出对象中值最大的属性

现有对象:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:30:45