对 json 层次结构进行排序

Posted

技术标签:

【中文标题】对 json 层次结构进行排序【英文标题】:Sort json hierarchy 【发布时间】:2022-01-08 08:52:39 【问题描述】:

我有以下结构的 JSON:


   "name":"Scorpiones",
   "children":[
      
         "name":"Parabuthus",
         "children":[
            
               "name":"Parabuthus schlechteri"
            ,
            
               "name":"Parabuthus granulatus"
            
         ]
      ,
      
         "name":"Buthidae",
         "children":[
            
               "name":"Androctonus",
               "children":[
                  
                     "name":"Androctonus crassicauda"
                  ,
                  
                     "name":"Androctonus bicolor"
                  
               ]
            
         ]
      
   ]

需要在层次结构的每一级按名称字段对元素进行排序。在 JS 的帮助下如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用Object.keys,它返回一个包含所有对象键的数组,然后您可以简单地对该数组进行排序。

const getSortedKeys = (obj) => 
  return Object.keys(obj).sort();

要扔掉你所有的对象嵌套键,你可以使用递归:

const trav = (obj) => 
    if(obj instanceof Array) 
        // go inside each object in the array
        obj.forEach(item => trav(item))
     else if(typeof obj === "object") 
        // sort object keys
        let keys = getSortedKeys(obj);
        // do whatevery you want...
        
        // go the the next levels
        keys.forEach(key => trav(obj[key]))
    

【讨论】:

以上是关于对 json 层次结构进行排序的主要内容,如果未能解决你的问题,请参考以下文章

c语言 s数据结构 入元素序列,采用堆排序对序列进行排序,并将堆依据树状结构在屏幕上输出层次遍历的结果

如何在搜索栏中对对象进行筛选后,如何对层次结构中的对象进行排序?

对具有嵌套对象结构的 json 进行排序,并返回与 json 结构相同的格式

排序sql树层次结构

核心数据 - 父/子层次结构的排序描述符

使用 LINQ 在 JSON 中创建树层次结构