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

如何按嵌套对象内部的最小值对JavaScript嵌套对象排序?

按嵌套对象内部最小值排序的实现方案

核心思路

  1. 递归计算最小值:对任意值,若为数字直接返回;若为对象,则遍历其所有值,递归获取最底层的数字最小值。
  2. 层级排序:先递归处理所有嵌套子对象,确保子层级已按规则排序;再对当前对象的键值对,按对应值的最小值升序排列。

代码实现

// 获取任意值的最小值(递归处理嵌套对象)
function getMinValue(value) {
  if (typeof value === 'number') {
    return value;
  }
  if (typeof value === 'object' && value !== null) {
    return Math.min(...Object.values(value).map(getMinValue));
  }
  return Infinity; // 非数字/对象类型返回无穷大,不参与排序优先级
}

// 递归排序嵌套对象
function sortObjectByMinValue(obj) {
  // 先处理所有嵌套子对象,确保子层级已排序
  const processedObj = {};
  for (const key of Object.keys(obj)) {
    const value = obj[key];
    processedObj[key] = typeof value === 'object' && value !== null ? sortObjectByMinValue(value) : value;
  }

  // 按每个键对应值的最小值升序排序键值对
  const sortedEntries = Object.entries(processedObj).sort(([_, valA], [__, valB]) => {
    return getMinValue(valA) - getMinValue(valB);
  });

  // 构建排序后的对象(ES6+ 保留插入顺序)
  const sortedObj = {};
  sortedEntries.forEach(([key, value]) => {
    sortedObj[key] = value;
  });
  return sortedObj;
}

测试示例

const originalObj = {
  "a": 50,
  "b": {
    "c": {
      "d": 69,
      "e": 420,
      "f": 21,
      "g": {
        "h": 5,
        "i": 3,
      }
    }
  },
  "j": 1,
  "k": 1000
};

const sortedResult = sortObjectByMinValue(originalObj);
console.log(JSON.stringify(sortedResult, null, 2));

输出结果

{
  "j": 1,
  "b": {
    "c": {
      "g": {
        "i": 3,
        "h": 5
      },
      "f": 21,
      "d": 69,
      "e": 420
    }
  },
  "a": 50,
  "k": 1000
}

内容的提问来源于stack exchange,提问作者Adrian Keim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:01:07