【发布时间】:2020-11-13 08:30:09
【问题描述】:
我有一个对象数组,格式如下:
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);
【问题讨论】:
-
你期望
b.label - a.label是什么?"bdefault51" - "adefault50"? -
那么问题是什么?你说孩子可以生孩子吗?你可能想要
return a.label.localeCompare(b.label)
标签: javascript arrays sorting ecmascript-6 ecmascript-5