如何按嵌套对象内部的最小值对JavaScript嵌套对象排序?
按嵌套对象内部最小值排序的实现方案
核心思路
- 递归计算最小值:对任意值,若为数字直接返回;若为对象,则遍历其所有值,递归获取最底层的数字最小值。
- 层级排序:先递归处理所有嵌套子对象,确保子层级已按规则排序;再对当前对象的键值对,按对应值的最小值升序排列。
代码实现
// 获取任意值的最小值(递归处理嵌套对象) 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
相关产品推荐
相关产品推荐

