繁体   English   中英

在 Angular (7) 中对具有嵌套子项的对象进行排序

[英]Sort Array of object having nested childs in Angular (7)

我试图根据包含内部孩子的对象字段“sortOrderNumber”对响应有效负载进行排序。

响应负载:

{   
    "content":
    [ 
        {
            "eserviceSettings":[ 
            { 
               "serviceName":"Licenses",
               "sortOrderNumber":5,
               "eserviceSettings":[ 
                  { 
                     "serviceName":"Manning Licenses",
                     "sortOrderNumber":2,
                     "eserviceSettings":[ 
                        { 
                           "serviceName":"Enquiry on Application Status",
                           "sortOrderNumber":2,
                           "eserviceSettings":[ 
                           ]
                        },
                        { 
                           "serviceName":"Enquiry of Manning Licence and Submission",
                           "sortOrderNumber":1,
                           "eserviceSettings":[ 
                           ]
                        }
                     ]
                  },
                  { 
                     "serviceName":"Craft Licenses",
                     "sortOrderNumber":1,
                     "eserviceSettings":[ 
                        { 
                           "serviceName":"Application for New Harbour Craft Licence",
                           "sortOrderNumber":2,
                           "eserviceSettings":[ 
                           ]
                        },
                        { 
                           "serviceName":"Application for New Pleasure Craft Licence",
                           "sortOrderNumber":1,
                           "eserviceSettings":[ 
                           ]
                        }
                     ]
                  },
                  { 
                     "serviceName":"Craft Inspection Booking",
                     "sortOrderNumber":5,
                     "eserviceSettings":[ 
                     ]
                  }
               ]
            }
            ]
        }
    ]
}

我试过下面的代码

const childEservices = content[0].eserviceSettings;
this.postLoginDashboardData = allObjs.concat(childEservices);
this.postLoginDashboardData.sort((a: any, b: any) =>  a.sortOrderNumber - b.sortOrderNumber);
      this.postLoginDashboardData.forEach( (element) => {
        element.eserviceSettings.sort((a: any, b: any) =>  a.sortOrderNumber - b.sortOrderNumber);
      });

排序后的结果低于内部孩子未排序的位置。不确定我在哪里丢失。

{   
        "content":
        [ 
            {
                "eserviceSettings":[ 
                { 
                   "serviceName":"Licenses",
                   "sortOrderNumber":5,
                   "eserviceSettings":[
                    { 
                         "serviceName":"Craft Licenses",
                         "sortOrderNumber":1,
                         "eserviceSettings":[ 
                            { 
                               "serviceName":"Application for New Harbour Craft Licence",
                               "sortOrderNumber":2,
                               "eserviceSettings":[ 
                               ]
                            },
                            { 
                               "serviceName":"Application for New Pleasure Craft Licence",
                               "sortOrderNumber":1,
                               "eserviceSettings":[ 
                               ]
                            }
                         ]
                      },
                      { 
                         "serviceName":"Manning Licenses",
                         "sortOrderNumber":2,
                         "eserviceSettings":[ 
                            { 
                               "serviceName":"Enquiry on Application Status",
                               "sortOrderNumber":2,
                               "eserviceSettings":[ 
                               ]
                            },
                            { 
                               "serviceName":"Enquiry of Manning Licence and Submission",
                               "sortOrderNumber":1,
                               "eserviceSettings":[ 
                               ]
                            }
                         ]
                      }
                      ,
                      { 
                         "serviceName":"Craft Inspection Booking",
                         "sortOrderNumber":5,
                         "eserviceSettings":[ 
                         ]
                      }
                   ]
                }
                ]
            }
        ]
    }

以最少的代码以更好的方式实现排序的任何帮助。 我试图得到的结果如下

{   
    "content":
    [ 
        {
            "eserviceSettings":[ 
            { 
               "serviceName":"Licenses",
               "sortOrderNumber":5,
               "eserviceSettings":[
                { 
                     "serviceName":"Craft Licenses",
                     "sortOrderNumber":1,
                     "eserviceSettings":[ 
                        { 
                           "serviceName":"Application for New Pleasure Craft Licence",
                           **"sortOrderNumber":1,**
                           "eserviceSettings":[ 
                           ]
                        },
                        { 
                           "serviceName":"Application for New Harbour Craft Licence",
                           **"sortOrderNumber":2,**
                           "eserviceSettings":[ 
                           ]
                        }
                     ]
                  },
                  { 
                     "serviceName":"Manning Licenses",
                     "sortOrderNumber":2,
                     "eserviceSettings":[
                        { 
                           "serviceName":"Enquiry of Manning Licence and Submission",
                           **"sortOrderNumber":1,**
                           "eserviceSettings":[ 
                           ]
                        },                       
                        { 
                           "serviceName":"Enquiry on Application Status",
                           **"sortOrderNumber":2,**
                           "eserviceSettings":[ 
                           ]
                        }
                     ]
                  },
                  ,
                  { 
                     "serviceName":"Craft Inspection Booking",
                     "sortOrderNumber":5,
                     "eserviceSettings":[ 
                     ]
                  }
               ]
            }
            ]
        }
    ]
}

先感谢您。

第一次排序后使用以下内容:

function sortRecursive(data) {
  if (data[0]) {
    data.forEach( (element) => {
      if (element.eserviceSettings) {
        element.eserviceSettings.sort((a, b) =>  a.sortOrderNumber - b.sortOrderNumber);
        sortRecursive(element.eserviceSettings);
      }
    });
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM