【问题标题】:Typescript sorting array with objects on multiple properties带有多个属性的对象的打字稿排序数组
【发布时间】:2016-05-18 01:20:46
【问题描述】:

我喜欢用具有多个属性的对象对数组进行排序。我的对象有一个名为 name 的字符串和一个名为强制的布尔值。

首先我要按年龄排序,然后按姓名排序。

我该怎么做?

按年龄排序很容易...:

this.model.mylist.sort((obj1: IObj, obj2: IObj => {
    if (obj1.age < obj2.age) {
        return -1;
    }
    if (obj1.age > obj2.age) {
        return 1;
    }
    return 0;
});

【问题讨论】:

  • 你的问题解决了吗?

标签: arrays typescript sorting


【解决方案1】:

这样的事情应该可以工作。该方法比较当前值和下一个值,并在两个年龄值相同的情况下添加比较。然后根据年龄按顺序假设列名。

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

【讨论】:

  • 你能解释一下你的答案吗?
  • 很简单,该方法比较当前值和下一个值,并在两个年龄值相同的情况下添加比较。然后根据年龄按顺序假设列名。
  • 请将此解释添加到您的答案中。
【解决方案2】:

好吧,您只在两个年龄值相同的情况下添加比较。所以这样的事情应该可以工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2019-09-28
    • 2018-10-09
    • 2021-07-10
    • 2021-08-05
    • 2019-10-03
    相关资源
    最近更新 更多