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))