[英]how to sort object array in TypeScript
我是 TypeScript 的新手。 我可能会问一个菜鸟问题。 我有以下对象数组。 我想按年龄或姓名对其进行排序。 这个问题之前有人问过。 阅读此答案后,我尝试遵循。 而这个。 我无法在 TypeScript 中编译它。
sortData2() {
const testData: object[] = [
{
name: 'name 1',
age: 20,
sex: 'M',
height: 7.5
},
{
name: 'name 1',
age: 10,
sex: 'M',
height: 6.5
},
{
name: 'name 3',
age: 30,
sex: 'F',
height: 4.5
}
];
testData.sort( (a, b) => {
return compare(a, b);
});
function compare(a: number | string | object, b: number | string | object) {
// compiler error Property 'age' does not exist on type 'string | number | object'.
return (a.age < b.age ? -1 : 1);
}
console.log(testData);
}
我该如何排序? 提前致谢!
在您的比较函数中,您说 a 和 b 可以是对象、字符串或数字; 但是随后您正在检查 a.age,除非 a 和 b 是具有属性年龄的对象,否则这没有意义。 那么你为什么在这里接受这么多可能的类型?
替换这个:
function compare(a: number | string | object, b: number | string | object) {
return (a.age < b.age ? -1 : 1);
}
有了这个:
function compareAge(a: {age: number}, b: {age: number}): number {
return (a.age < b.age ? -1 : 1);
}
或者更好的是,这可以更好地处理 a.age 和 b.age 相等的情况。 如果 a 小于 b,则array.sort 比较函数应该返回一个小于 0 的数字,如果 a 大于 b,则返回大于 0,如果它们相等则返回 0。 数字的实际值并不重要——只是符号。 所以你可以映射到 -1 或 1,但这是不必要的。 简单的减法允许返回正数、负数和 0。
function compareAge(a: {age: number}, b: {age: number}): number {
return a.age - b.age;
}
调用testData.sort( compareAge );
时仍然会出错testData.sort( compareAge );
因为你已经用testData: object[]
声明了一个非常模糊的类型。 您可以完全删除此类型,Typescript 会推断出正确的类型,或者您可以将其声明为更具体的类型,例如testData: Person[]
。 只要 testData(或任何其他数组)的元素扩展{age: number}
您就可以使用compareAge
进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.