Arrays 具有多个属性的对象的Typescript排序数组

Arrays 具有多个属性的对象的Typescript排序数组,arrays,typescript,sorting,Arrays,Typescript,Sorting,我喜欢使用具有多个属性的对象对数组进行排序。我的对象有一个名为name的字符串和一个名为mandatory的布尔值 首先我想按年龄排序,然后是名字 我该怎么做 按年龄排序很容易…: this.model.mylist.sort((obj1: IObj, obj2: IObj => { if (obj1.age < obj2.age) { return -1; } if (obj1.age > obj2.age) { ret

我喜欢使用具有多个属性的对象对数组进行排序。我的对象有一个名为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;
});
this.model.mylist.sort((obj1:IObj,obj2:IObj=>{
if(obj1.ageobj2.age){
返回1;
}
返回0;
});

好吧,您只在两个年龄值相同的情况下添加比较。因此类似的方法应该可以工作:

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);
});
this.model.mylist.sort((obj1:IObj,obj2:IObj)=>{
if(obj1.ageobj2.age){
返回1;
}
返回obj1.name.localeCompare(obj2.name);
});

类似的方法应该有效。该方法比较当前值和下一个值,并在两个年龄值相同的情况下添加比较。然后根据年龄按顺序假定列名

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;
}
private compareTo(val1、val2、typeField){
设结果=0;
如果(类型字段==“ftDate”){
结果=val1-val2;
}否则{
if(val1val2){
结果=1;
}否则{
结果=0;
}
}
返回结果;
}
-

this.model.mylist.sort((a,b)=>{
让cols=[“年龄”,“姓名];
设i=0,result=0,resultordem=0;
while(结果===0&&i
您的问题解决了吗?您能解释一下您的答案吗?很简单,该方法比较当前值和下一个值,并在两个年龄值相同的情况下添加比较。然后根据年龄按顺序假定列名。请将此解释添加到您的答案中。
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;
});