带有多个属性的对象的打字稿排序数组
Posted
技术标签:
【中文标题】带有多个属性的对象的打字稿排序数组【英文标题】: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;
);
【问题讨论】:
你的问题解决了吗? 【参考方案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);
);
【讨论】:
以上是关于带有多个属性的对象的打字稿排序数组的主要内容,如果未能解决你的问题,请参考以下文章