对具有嵌套对象结构的 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 结构相同的格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环内循环并通过 AJAX 调用对 JSON 对象的结果进行排序?

如何对嵌套的ObjectData Flutter进行排序

如何按嵌套值对 JSON 对象进行排序?

如何通过 orderBy 对嵌套的 Linq 对象进行排序

根据嵌套键值对对象数组进行排序的最快方法

从嵌套对象中提取值并使用 LINQ 对它们进行排序