我一直在试图解决我在打字时遇到的一个非常奇怪的问题。它将内联布尔表达式视为第一个值的类型,而不是完整的表达式。
所以如果你尝试以下简单的方法:
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2)=> n1 > n2);
试一试
您将在排序方法上得到一个错误,表示参数与调用目标的任何签名不匹配,因为您的结果是数值而不是布尔值。我想我漏掉了一些东西,因为我很确定n1>n2是一个布尔命题。
最简单的方法似乎是用第一个数减去第二个数:
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2) => n1 - n2);
https://alligator.io/js/array-sort-numbers/
我今天在尝试重新创建_时写了这篇文章。sortBy在TypeScript中,我想我会把它留给任何需要的人。
// ** Credits for getKeyValue at the bottom **
export const getKeyValue = <T extends {}, U extends keyof T>(key: U) => (obj: T) => obj[key]
export const sortBy = <T extends {}>(index: string, list: T[]): T[] => {
return list.sort((a, b): number => {
const _a = getKeyValue<keyof T, T>(index)(a)
const _b = getKeyValue<keyof T, T>(index)(b)
if (_a < _b) return -1
if (_a > _b) return 1
return 0
})
}
用法:
它需要一个泛型类型T的数组,因此<T的强制转换扩展{}>,以及使用T[]输入形参和函数返回类型。
const x = [{ label: 'anything' }, { label: 'goes'}]
const sorted = sortBy('label', x)
** getByKey fn在这里找到
对于字符串,我这样做,
let unSortedArray = ['d', 'b', 'c', 'a'];
let sortedArray = unSortedArray.sort((x, y) => x > y ? 1 : x < y ? -1 : 0)
它可以很容易地扩展到更复杂的类型,例如字典。在这种情况下,使用x.喜怒无常,y.喜怒无常。
unSortedObjectArray.sort((x, y) => x.whicheverKey > y.whicheverKey ? 1 : x.whicheverKey < y.whicheverKey ? -1 : 0)
最简单的方法似乎是用第一个数减去第二个数:
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2) => n1 - n2);
https://alligator.io/js/array-sort-numbers/