我喜欢使用具有多个属性的对象对数组进行排序。我的对象有一个名为name的字符串和一个名为mandatory的布尔值。
首先,我想对年龄进行排序,接下来是名字。
我该怎么做?
按年龄排序很容易......:
this.model.mylist.sort((obj1: IObj, obj2: IObj => {
if (obj1.age < obj2.age) {
return -1;
}
if (obj1.age > obj2.age) {
return 1;
}
return 0;
});
答案 0 :(得分:4)
嗯,只有在两个年龄值相同的情况下才会为案例添加比较。所以这样的事情应该有效:
this.model.mylist.sort((obj1: IObj, obj2: IObj) => {
if (obj1.age < obj2.age) {
return -1;
}
if (obj1.age > obj2.age) {
return 1;
}
return obj1.name.localeCompare(obj2.name);
});
答案 1 :(得分:0)
这样的事情应该有效。该方法比较当前值和下一个值,并将两个年龄值相同的情况进行比较。然后根据年龄按顺序假设列名称。
private compareTo(val1, val2, typeField) {
let result = 0;
if (typeField == "ftDate") {
result = val1 - val2;
} else {
if (val1 < val2) {
result = - 1;
} else if (val1 > val2) {
result = 1;
} else {
result = 0;
}
}
return result;
}
-
this.model.mylist.sort((a, b) => {
let cols = ["age", "name"];
let i = 0, result = 0, resultordem = 0;
while (result === 0 && i < cols.length) {
let col = cols[i];
let valcol1 = a[col];
let valcol2 = b[col];
let typeField = "string";
if (col == "age") {
typeField = "number";
}
if (valcol1 != "null" && valcol1 != "null") {
resultordem = this.compareTo(valcol1, valcol2, typeField);
if (resultordem != 0) {
break;
}
}
i++;
}
return resultordem;
});