Javascript 按属性数组对对象数组进行排序
我得到了一组像这样的对象:Javascript 按属性数组对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我得到了一组像这样的对象: var SkillBuddys = [ { Property1: "1", Property2: "Test", Property3: "Data", Property4: [{},{},{}], }, { Property1: "2", Property2: "Test2", Property3: "Data2" }, {
var SkillBuddys = [
{
Property1: "1",
Property2: "Test",
Property3: "Data",
Property4: [{},{},{}],
}, {
Property1: "2",
Property2: "Test2",
Property3: "Data2"
}, {
Property1: "3",
Property2: "Test3",
Property3: "Data3",
Property4: [{},{}],
}, {
Property1: "4",
Property2: "Test4",
Property3: "Data4"
}, {
Property1: "5",
Property2: "Test5",
Property3: "Data5",
Property4: [{}],
}
];
我想使用属性4上的javaScript对其进行排序,因此如果对象具有属性4并包含数组。像这样:
var SkillBuddys = [
{
Property1: "1",
Property2: "Test",
Property3: "Data",
Property4: [{},{},{}],
}, {
Property1: "3",
Property2: "Test3",
Property3: "Data3",
Property4: [{},{}],
}, {
Property1: "5",
Property2: "Test5",
Property3: "Data5",
Property4: [{}],
}, {
Property1: "2",
Property2: "Test2",
Property3: "Data2"
}, {
Property1: "4",
Property2: "Test4",
Property3: "Data4"
}
];
如果属性4不存在,则返回“未定义”。如何使用Array.sort对其排序?您可以使用
length
属性和|
运算符对数组进行排序
var数组=[{Property1:“1”,Property2:“Test”,Property3:“Data”,Property4:[{},{},{},{},{Property1:“2”,Property2:“Test2”,Property3:“Data2”},{Property1:“3”,Property2:“Test3”,Property2:“Test3”,Property3:“Data3”,“Property4:[},{},{},},{Property1:“4”,Property2:“Test4”,Property3:“Data4:“testy5”,property25:{,属性3:“数据5”,属性4:[{}],}];
array.sort((a,b)=>(b['Property4']||[]).length-(a['Property4']|[]).length);
console.log(数组)代码>一种方法是分解结构,如果属性不存在,则使用默认数组。然后,您可以通过数组长度的差异.sort()
:
const skillBuddys=[{Property1:“1”,Property2:“Test”,Property3:“Data”,Property4:[{},{},{},{Property1:“2”,Property2:“Test2”,Property3:“Data2”},{Property1:“3”,Property2:“Test3”,Property2:“Test3”,Property3:“Data3”,Property4:[},{},{},{Property1:“4”,Property2:“Test4”,Property3:“datay2:“Test5”{,属性3:“数据5”,属性4:[{}],}];
const res=skillBuddys.sort(
({Property4:a=[]},{Property4:b=[]})=>b.length-a.length
);
控制台日志(res)代码>
这将为您提供一个数组,其中元素的Property4按内部数组的长度排序,其余元素随后不按指定顺序排序(您可以使用自己选择的顺序管道排序()
SkillBuddys
.filter((x) => Array.isArray(x.Property4) )
.sort( (a,b) => b.Property4.length - a.Property4.length)
.concat( SkillBuddys.filter((x) => !Array.isArray(x.Property4))