我一直在试图找出一个非常奇怪的问题,我遇到了 typescript 。它将内联布尔表达式视为第一个值的类型,而不是完整的表达式。
所以如果你尝试一些简单的东西,比如下面的:
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2)=> n1 > n2);
TryIt
您将在排序方法上得到一个错误,指出参数不匹配调用目标的任何签名,因为您的结果是数字而不是布尔值。我想我漏掉了一些东西,因为我很确定n1>n2是一个布尔语句。
9条答案
按热度按时间a64a0gku1#
编号
在对数字排序时,可以使用紧凑比较:
即
-
而不是<
。其他类型
如果你在比较其他的东西,你需要将比较转换成一个数字。
对象
对于对象,可以根据属性进行排序,请记住上面关于能够简写数字类型的信息。下面的示例可以与类型无关。
j2cgzkjk2#
错误是完全正确的。
正如它试图告诉你的,
.sort()
接受一个返回数字的函数,而不是布尔值。如果第一项较小,则需要返回负数;如果它更大则为正,如果它们相等则为零。
hujrc8aj3#
伟大的回答Sohnee。我想补充一点,如果你有一个对象数组,你想按键排序,那么它几乎是一样的,这是一个可以按日期(数字)或标题(字符串)排序的例子:
如果变量n1[field]和n2[field]更动态,也可以使里面的值作为变量n1[field] vs n2[field],只是保持字符串和数字之间的差异。
rlcwz9us4#
按某个字段排序:
9jyewag05#
排序混合数组(字母和数字)
yi0zb3m46#
最简单的方法似乎是从第一个数字中减去第二个数字:
https://alligator.io/js/array-sort-numbers/
093gszye7#
我用这个
ruoxqz4g8#
对于弦我这样做,
其可以容易地扩展到更复杂的类型,例如,字典在这种情况下,使用
x.whicheverKey, y.whicheverKey
代替x, y
,例如jm2pwxwz9#
我今天在尝试用TypeScript重新创建
_.sortBy
时写了这个,并认为我会把它留给任何需要的人。用法:
它需要一个泛型类型T的数组,因此需要对
<T extends {}>
进行强制转换,并使用T[]
键入参数和函数返回类型**
getByKey
fn在此找到