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

JavaScript:如何按rooms.price对嵌套对象数组进行升序排序?

JavaScript嵌套对象与数组的多维度排序实现

问题场景

需要对包含嵌套对象和数组的JavaScript对象进行排序,要求按所有房间的price升序排列:

  1. 每个results数组内部的元素按rooms.price升序排序
  2. 外层对象的键值对按其对应results数组中最小的price升序排序

原对象结构:

let object = {
    '2573': {
        results: [
            { "rooms": { "price": 1500 } },
            { "rooms": { "price": 1700 } }
        ],
    },
    '2574': {
        results: [
            { "rooms": { "price": 1800 } },
            { "rooms": { "price": 1900 } }
        ],
    },
    '2575': {
        results: [
            { "rooms": { "price": 1850 } },
            { "rooms": { "price": 1200 } }
        ],
    }
};

之前尝试的object.sort(...)无效,原因是:

  • JavaScript对象本身没有sort方法,只有数组具备该方法
  • 代码未正确访问到嵌套的rooms.price属性

解决方案

分两步实现排序:

1. 排序每个results数组内部元素

遍历外层对象的每个值,对其results数组按rooms.price升序排序:

for (const key in object) {
  object[key].results.sort((a, b) => a.rooms.price - b.rooms.price);
}

2. 排序外层对象

将外层对象转为[键, 值]格式的数组,根据每个值对应的results数组中最小的price排序,最后转回对象:

const sortedObject = Object.fromEntries(
  Object.entries(object).sort(([, valA], [, valB]) => {
    // 获取当前分组的最小房价
    const minPriceA = Math.min(...valA.results.map(item => item.rooms.price));
    const minPriceB = Math.min(...valB.results.map(item => item.rooms.price));
    return minPriceA - minPriceB;
  })
);

完整代码

let object = {
    '2573': {
        results: [
            { "rooms": { "price": 1500 } },
            { "rooms": { "price": 1700 } }
        ],
    },
    '2574': {
        results: [
            { "rooms": { "price": 1800 } },
            { "rooms": { "price": 1900 } }
        ],
    },
    '2575': {
        results: [
            { "rooms": { "price": 1850 } },
            { "rooms": { "price": 1200 } }
        ],
    }
};

// 排序内部results数组
for (const key in object) {
  object[key].results.sort((a, b) => a.rooms.price - b.rooms.price);
}

// 排序外层对象
const sortedObject = Object.fromEntries(
  Object.entries(object).sort(([, valA], [, valB]) => {
    const minPriceA = Math.min(...valA.results.map(item => item.rooms.price));
    const minPriceB = Math.min(...valB.results.map(item => item.rooms.price));
    return minPriceA - minPriceB;
  })
);

console.log(sortedObject);

执行后得到的结果与期望完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:01:10