按数字JavaScript对包含对象和数组的对象进行排序



我试图对包含其他对象和数组的对象进行排序E.g

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((a, b) => Object.keys(a)[0] - Object.keys(b)[0]);

但我显然没有达到必要的对象能够做这个过滤

那么,有可能根据对象中所有房间的价格进行排序吗?

结果升序

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

循环键以获得它们的结果数组,然后对它们进行独立排序。

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}}]}};
const sortResults = (obj) => {
for (key in obj) {
obj[key].results.sort((a, b) => {
return a.rooms.price - b.rooms.price;
});
}

return obj;
}
console.log( sortResults(object) );

for(let i in a){
let element = a[i];
element.results.sort((el1, el2) => el1.rooms.prices - el2.rooms.prices)
}
console.log(a);

我想给这个问题一行代码,尽管你可以通过编写大量代码来完成,但这对程序员来说不好

// this is the actual function that will do the job
function sortNestedObject(o) {
return Object.keys(o).reduce((p,c)=>({...p,[c]:{results:object[c].results.sort((a,b)=>a.rooms.price-b.rooms.price)}}),{})
}
const object = {
"2573": {
"results": [
{
"rooms": {
"price": 1700
}
},
{
"rooms": {
"price": 1500
}
}
]
},
"2574": {
"results": [
{
"rooms": {
"price": 1800
}
},
{
"rooms": {
"price": 1900
}
}
]
},
"2575": {
"results": [
{
"rooms": {
"price": 1850
}
},
{
"rooms": {
"price": 1200
}
}
]
}
}

const sorted = sortNestedObject(object)
console.log(sorted)

最新更新