对具有嵌套对象结构的 json 进行排序,并返回与 json 结构相同的格式
Posted
技术标签:
【中文标题】对具有嵌套对象结构的 json 进行排序,并返回与 json 结构相同的格式【英文标题】:Sort a json with nested objects structure and return a format same as the structure of json 【发布时间】:2022-01-20 21:48:21 【问题描述】:我对这个问题的标题。可能不合适,但我的问题是我有以下类型的 json...
"trees":
"name":"a",
"age":"9",
"height":"10",
"location":"park"
,
"cars":
"name":"b",
"age":"3",
"height":"10",
"location":"park"
,
"bikes":
"name":"c",
"age":"110",
"height":"10",
"location":"park"
现在我想根据年龄 3,9,110 对其进行排序。并以与
相同的格式获取这些排序数据
"cars":
"name":"b",
"age":"3",
"height":"10",
"location":"park"
,
"trees":
"name":"a",
"age":"9",
"height":"10",
"location":"park"
,
"bikes":
"name":"c",
"age":"110",
"height":"10",
"location":"park"
;
这种格式对我来说很重要,因为我将它进一步传递给另一个 react 子组件,在那里我对其进行了一些操作以将其进一步发送到其他组件。
我在网上搜索并找到了对该数组进行排序的方法,其中首先将初始化一个数组,并且只推送 json 的值而不是该数组中的键,然后进行排序。 该方法工作正常,但我得到的结果数组的类型与我原来的导致麻烦的 json 类型不同,它将数据进一步发送到组件。
【问题讨论】:
为什么不使用数组。这是为损坏的物品制作的。 我正在开发的应用程序有许多组件,其中数据以与给定 json 相同的格式解释,因此我必须将其保持为相同的格式 【参考方案1】:转换为键值对数组,然后按值的age
属性排序转换为数字,然后从条目数组转换回对象。
Object.fromEntries(
Object.entries(data).sort(
([, objA], [,objB]) => Number(objA.age) - Number(objB.age)
)
);
const data =
"trees":
"name": "a",
"age": "9",
"height": "10",
"location": "park"
,
"cars":
"name": "b",
"age": "3",
"height": "10",
"location": "park"
,
"bikes":
"name": "c",
"age": "110",
"height": "10",
"location": "park"
const sortedData = Object.fromEntries(
Object.entries(data).sort(([, objA], [,objB]) => Number(objA.age) - Number(objB.age))
);
console.log(sortedData);
【讨论】:
【参考方案2】:var data =
"trees":
"name":"a",
"age":9,
"height":"10",
"location":"park"
,
"cars":
"name":"b",
"age":3,
"height":"10",
"location":"park"
,
"bikes":
"name":"c",
"age":110,
"height":"10",
"location":"park"
,
sorted = ;
Object
.keys(data).sort(function(a, b)
return data[a].age - data[b].age;
)
.forEach(function(key)
sorted[key] = data[key];
);
console.log(sorted);
【讨论】:
以上是关于对具有嵌套对象结构的 json 进行排序,并返回与 json 结构相同的格式的主要内容,如果未能解决你的问题,请参考以下文章