我有一个对象数组,其格式如下:
var test = [
{
value: "Others",
parentId: "",
label: "Others",
children: [
{
value: "user12",
parentId: "Others",
label: "bdefault51"
},
{
value: "user11",
parentId: "Others",
label: "adefault50"
}
]
},
{
value: "Local",
parentId: "",
label: "local",
children: [
{
value: "user56",
parentId: "local",
label: "bserver"
},
{
value: "user78",
parentId: "local",
label: "aserver"
}
]
},
{
value: "Lab1",
parentId: "",
label: "lab1",
children: [
{
value: "user157",
parentId: "ent1",
label: "enterprise45"
},
{
value: "user139",
parentId: "ent1",
label: "enterprise37"
},
{
value: "user136",
parentId: "ent1",
label: "enterprise56"
}
]
}
];
输出量
[
{
value: "Lab1",
parentId: "",
label: "lab1",
children: [
{
value: "user139",
parentId: "ent1",
label: "enterprise37"
},
{
value: "user157",
parentId: "ent1",
label: "enterprise45"
},
{
value: "user136",
parentId: "ent1",
label: "enterprise56"
}
]
},
{
value: "Local",
parentId: "",
label: "local",
children: [
{
value: "user78",
parentId: "local",
label: "aserver"
},
{
value: "user56",
parentId: "local",
label: "bserver"
}
]
},
{
value: "Others",
parentId: "",
label: "Others",
children: [
{
value: "user11",
parentId: "Others",
label: "adefault50"
},
{
value: "user12",
parentId: "Others",
label: "bdefault51"
},
]
}
];
我需要根据属性label
对对象进行排序。 子级可以上升到N
级,也需要按label
进行排序。
我试过的代码
for (var i = 0; i < test.length; i++) {
test[i].children.sort((a, b) => {
return b.label - a.label;
});
}
//Tried with lodash also
let sorted = _.sortBy(test,"label");
let sorted1 = _.orderBy(test,"label","asc");
console.log(test);
您可以采用递归方法,迭代给定数组及其子属性。
const
sort = array => {
array.sort((a, b) => a.label.localeCompare(b.label));
array.forEach(({ children = [] }) => sort(children));
};