[英]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.