使用多个属性上的对象对Typescript排序数组

时间:2016-02-08 11:32:16

标签: 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) {
        return 1;
    }
    return 0;
});

2 个答案:

答案 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;
});