我得到了一个像这样的对象数组:
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对此进行排序?
答案 0 :(得分:3)
您可以使用sort
属性和length
运算符来||
数组。
var array = [ { 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: [{}], } ];
array.sort((a, b) => (b['Property4'] || []).length - (a['Property4'] || []).length);
console.log(array);
答案 1 :(得分:2)
一种方法可能是进行分解,然后在属性不存在时使用默认数组。然后,您可以.sort()
通过数组长度的差异:
const 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: [{}], } ];
const res = skillBuddys.sort(
({Property4: a = []}, {Property4: b = []}) => b.length - a.length
);
console.log(res);
答案 2 :(得分:1)
SkillBuddys
.filter((x) => Array.isArray(x.Property4) )
.sort( (a,b) => b.Property4.length - a.Property4.length)
.concat( SkillBuddys.filter((x) => !Array.isArray(x.Property4))
这将为您提供一个数组,其中具有Property4的元素按内部数组的长度排序,之后其余元素没有指定的顺序(您可以使用选择的顺序来传递sort())< / p>