我试图对包含其他对象和数组的对象进行排序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)